有人有合理的解释为什么 javascript 不将对象字面量作为值传递给通过函数参数传递的全局变量吗?
我是否忽略了一些基本规则?
(function(global) {
var id = "3543a1354";
global = {
name: 'global',
getId: function() {
return id;
}
};
})(this.global = this.global || {})
所以基本上执行代码后参数'global'的值是一个空对象。很奇怪:如果在最后一行设置断点并在控制台中执行对象字面量赋值,那么该值将正确传递给“global”。
顺便说一句,这会按预期工作:
(function(global) {
var id = "3543a1354";
global.name = "global";
global.getId = function() {
return id;
}
}(this.global = this.global || {}))
最佳答案
在这两个函数中,global
是局部变量,因为它是函数参数。
在第一种情况下,您使用文字符号创建一个新对象,并将其分配给局部变量。这对函数调用中使用的变量没有影响。
在第二种情况下,您正在修改局部变量引用的对象的属性。这是函数调用中使用的变量所引用的同一对象,因此它对调用者可见。
关于javascript - 将值传递给全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22816936/