【发布时间】:2011-09-30 22:29:06
【问题描述】:
我正在尝试以不可见的方式将一个库换成另一个库,但仅限于给定的范围。这是问题的简化草图。 x 代表旧的现有库,y 代表新库,$ 是我想要影响的全局。目标是让withLib 成功地将其回调中所有代码的 $ 从 x 更改为 y。
您可以通过这个示例看到,我可以影响外部上下文中的代码,但不能影响内部上下文。我尝试将callback() 包装在一个闭包中,但这也没有完全做到。
x = "1.0"
y = "2.0"
$ = x;
withLib = function(callback) {
$ = y
callback()
$ = x
}
withLib(function(){
console.log($, $ == "2.0" ? "outer success" : 'outer fail')
someCb = function() {
console.log($, $=="2.0" ? "inner success" : "inner fail")
}
})
someCb()
// results in "outer success" and "inner fail"
我认为答案涉及设置正确的关闭方式,但我不知道如何。有什么想法吗?
【问题讨论】:
-
哪两个框架?可能有更好的解决方案。
-
Library
x是一个未知的旧版本的 jQuery 或类似的 lib,通过jQuery.noConflict()获得,libraryy是一个新加载的 jQuery。我想要任何包含在withLib中的代码(以及它的任何回调)来使用新的 jQuery。可能吗?
标签: javascript scope closures