我試圖無意間將一個庫替換爲另一個庫,但僅限於給定範圍。這是問題的簡化草圖。 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