在下面的代码中,我传递了
(function(Index){
Index.Index = function(){console.log(23)};
Index = function(){console.log(123)};
}(Window.Index = Window.Index || {}));
然而,我得到的回报是Window.Index={Index:function...}
哪个记录23。
我正在试图将它重新声明为一个函数。 例如,期望值应为:
Window.Index = function(){console.log(123)};
我做错了什么?
答案 0 :(得分:1)
您在函数中获得的变量是对Index
对象的引用,而不是对包含此引用的变量的引用。在javascript中,参数总是按值传递,即使这些值是对象的引用。
解决方案
1)传递window
(即持有Index
属性的对象)
(function(holder){
holder.Index = function(){console.log(123)};
})(window);
2)直接更改window.Index:
(function(){
window.Index = function(){console.log(123)}; // or omit 'window', that's the same
})();
3)传递属性的名称:
(function(holder, propname){
holder[propname] = function(){console.log(123)};
})(window, "Index");
4)传递回调:
(function(callback){
var Index = function(){console.log(123)};
callback(Index);
})(function(v){window.Index=v});
请注意,您基本上使用的是公共module pattern。