我试图无意间将一个库替换为另一个库,但仅限于给定范围。这是问题的简化草图。 x
代表旧的预存库,y
代表新库,$
是我想要影响的全局。我们的目标是让withLib
成功地将$从x调整为y,以获取其回调中的所有代码。暂时更改JavaScript全局变量
你可以看到这个例子中,我可以影响外部环境中的代码,但不是内部的。我已经尝试在关闭中包装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"
我认为答案包括设置正确的封闭类型,但我看不出如何。有什么想法吗?
什么是两个框架?可能有更好的解决方案。 – alex
库'x'是通过'jQuery.noConflict()'获得的jQuery或类似库的旧版未知版本,库'y'将是一个新加载的jQuery。我想要在'withLib'中包装任何代码(以及它的任何回调函数)来使用新的jQuery。可能? – Matt