javascript - 将值传递给全局变量

标签 javascript object global-variables parameter-passing

有人有合理的解释为什么 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/

相关文章:

javascript - 如何在多个 Docker 副本中仅运行一次计划代码?

javascript - 在 Node.js 中使用 AJAX(作为 RESTful API)获取 JSON 文件,并根据点击前端的按钮来解析它

javascript - 返回函数的值而不是 Array.forEach 中的内部函数

java - 在Java中创建数组的数组

python - 使变量全局到python中的多个文件

javascript - 选中相应的复选框时,我无法获取两个输入框的值

javascript - 如何避免在我的 Firefox 附加组件中出现“"TypeError: can' t 访问死对象”状态?

php - 如何在面向对象的 PHP 中显示警报/消息?

javascript - 如何在浏览器代码中查找不属于 DOM、主机对象等的所有 JavaScript 全局变量?

c - 在c中为全局变量赋值会导致错误