我试图在不可见的情况下将一个库换成另一个库,但仅限于给定的范围。这是问题的简化草图。 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"
我认为答案涉及设置正确的关闭类型,但我不知道如何设置。有什么想法吗?
最佳答案
您可以使用匿名函数创建一个范围,其中 $
是 y
:
x = "1.0"
y = "2.0"
$ = x;
(function ($) {
console.log($, $ == "2.0" ? "outer success" : 'outer fail')
someCb = function() {
console.log($, $=="2.0" ? "inner success" : "inner fail")
}
}(y));
someCb()
或者,关键字 with
通常是要避免的,但是如果你设置了它:
with ({'$': y}) {
console.log($, $ == "2.0" ? "outer success" : 'outer fail')
someCb = function() {
console.log($, $=="2.0" ? "inner success" : "inner fail")
}
}
关于javascript - 临时更改 JavaScript 全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6619086/