在下面的代码中,我传递了
(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/