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

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

我做错了什么?

最佳答案

您在函数中获得的变量是对 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 .

关于javascript - 在函数内部传递 JS 中的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14830258/

相关文章:

javascript - 实现 Angular ui-router 而不是 ng-router

javascript - 如果单击滚动条,则取消 mousedown 事件?

javascript - Pushwoosh 和 PhoneGap 2.5.0 实现

javascript - 如何从 JSON 中提取和转换数据?

javascript - 使用 ObjectID 删除特定记录

javascript - 如何等待 promise 完成然后返回生成器函数?

javascript - 我怎样才能让jquery倒计时重定向到重置文件

javascript - 将 vue-gtm(谷歌标签管理器)附加到 Router 实例

javascript - 检查带有日期的键值对是否存在,如果不存在则将其推送到数组中

javascript - 当我使用 canvas 和 requestAnimationFrame 对图像数组进行动画处理时出现位置问题