【发布时间】:2018-09-18 06:12:41
【问题描述】:
我最近一直在为某些模块使用IIFE 模式,但遇到了一个我似乎无法找到答案的问题。在我的项目中,我需要传递几个全局变量以供使用。其中之一是全局 googletag 变量,它以默认状态加载,然后在加载外部代码后更改。
但是,它似乎没有更新,因为该模式似乎不是创建引用而是创建副本。我已将问题简化为以下内容。
window.globalLevel = 'First';
var Module = (function(_g){
function _stuff(){
return _g;
}
return {
get stuff(){
return _stuff();
}
}
})(window.globalLevel);
// Initial state.
console.log("In Module:", Module.stuff); // "First"
console.log("In Top:", window.globalLevel) // "First"
// After change.
console.log("--- Changing value ---")
window.globalLevel = 'Second'
console.log("In Module:", Module.stuff); // "First"
console.log("In Top:", window.globalLevel) // "Second"
我可以做些什么来解决这个问题吗?我应该做出什么样的调整或考虑?我应该直接在模块中直接引用window.globalReference 吗?看起来很乱,但似乎确实有效。
【问题讨论】:
-
JavaScript 没有变量引用。数组和对象作为引用传递,如果您修改对象,它将反映在引用它的所有变量中。但原始类型不是。
标签: javascript iife