Я пытаюсь незаметно поменять одну библиотеку на другую, но только для заданной области. Вот упрощенный набросок проблемы. 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"
Я думаю, что ответ заключается в том, чтобы установить правильное закрытие, но я не понимаю, как это сделать. Есть мысли?