繁体   English   中英

将值传递给全局变量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM