gpt4 book ai didi

javascript - 为什么对象不分配 null

转载 作者:行者123 更新时间:2023-12-01 01:56:17 25 4
gpt4 key购买 nike

如何解释此函数 clear() 的行为?为什么对象 a 不分配 null ?

var a = {};
function clear(a) {
a.b = 2;
a = null;
}
clear(a);

console.log(a); // {b: 2}
console.log(a.b); // 2

最佳答案

当您在 JavaScript 中创建变量时,您并不是在使用对象本身。相反,您正在使用对象的引用。将变量视为指向对象的符号(在 C 等其他语言中,这些引用适本地称为指针)。

此外,函数内部引用的任何参数都是它们自己的、不同的引用。因此,在函数内部将这些变量分配给其他变量不会更改(变异)它们引用的对象。

例如:

var someObject = {a: 1, b:2, c:3};
function doSomething(a) {
a = null;
}

doSomething(someObject);
console.log(someObject) // {a: 1, b:2, c:3}

doSomething 函数内部发生的唯一事情是 a 被设置为指向 null 而不是 someObject.

在您的示例中,您有一个名为 a 的全局变量(在函数外部定义的变量),以及一个也称为 a 的局部函数变量。如果您希望函数更改全局 a,则必须从 clear 中删除参数,或者更改参数名称并仍然引用 aclear 函数中,如下所示:

var a = {};
function clear() {
a.b = 2;
a = null;
}
clear();

console.log(a); // null
console.log(a.b); // Uncaught TypeError: Cannot read property 'b' of null

var a = {};
function clear(b) {
a.b = 2;
a = null;
}
clear(a); // Note that it does not matter whether you pass a in or not

console.log(a); // null
console.log(a.b); // Uncaught TypeError: Cannot read property 'b' of null

关于javascript - 为什么对象不分配 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51013530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com