3

在下面的代码中,我通过

(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)};

我究竟做错了什么?

4

1 回答 1

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});

请注意,您基本上使用的是通用模块模式

于 2013-02-12T10:25:03.100 回答