在函数内部传递JS中的引用

时间:2013-02-12 10:23:16

标签: javascript

在下面的代码中,我传递了

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

我做错了什么?

1 个答案:

答案 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