[英]Passing values to global variables
有人有一个合理的解释,为什么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
是局部变量,因为它是一个函数参数。
在第一种情况下,您将使用文字表示法创建一个新对象,并将其分配给局部变量。 这对函数调用中使用的变量没有影响。
在第二种情况下,您正在修改局部变量引用的对象的属性。 该对象与函数调用中使用的变量所引用的对象相同,因此调用者可以看到该对象。
您将this.global
传递给函数,并且在函数global
是引用global global
的参数。
当你说,
global = {...}
您现在正在更改global
引用。 由于已更改引用,因此全局global
变量将保持不变,而局部global
变量将引用新分配的对象。
在第二种情况下
global.name = "global";
global.getId = function () {..}
您正在更改局部global
对象,它实际上是指global global
。 因此,您正在间接更改global global
。 这就是为什么这会改变global global
,而第一个没有。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.