Javascript 为什么对象不';t分配空值

Javascript 为什么对象不';t分配空值,javascript,Javascript,如何解释此函数的行为clear()? 为什么对象a没有分配空值 var a = {}; function clear(a) { a.b = 2; a = null; } clear(a); console.log(a); // {b: 2} console.log(a.b); // 2 将a传递给函数clear时,将引用副本传递给对象a。因此执行a.b=2设置对象a中的值b 但是正如我所提到的clear函数的a内部只是引用的一个副本,因此将其设置为null只表示clear函数

如何解释此函数的行为
clear()
? 为什么对象
a
没有分配空值

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

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

a
传递给函数
clear
时,将引用副本传递给对象
a
。因此执行
a.b=2设置对象
a
中的值
b


但是正如我所提到的
clear
函数的
a
内部只是引用的一个副本,因此将其设置为
null
只表示
clear
函数参数
a
内部指向
null
。它不会修改原始a对象。

a
传递到函数
清除
时,将引用副本传递到对象
a
。因此执行
a.b=2设置对象
a
中的值
b


但是正如我所提到的
clear
函数的
a
内部只是引用的一个副本,因此将其设置为
null
只表示
clear
函数参数
a
内部指向
null
。它不会修改对象的原始属性。

在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
中删除参数,或者更改参数名称并在
clear
函数中仍然引用
a
,如下所示:

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


在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
中删除参数,或者更改参数名称并在
clear
函数中仍然引用
a
,如下所示:

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


这种行为被sharingall调用
a=null
函数中的does是将局部变量
a
指向一个新位置--null。它对外部变量
a
指向的位置没有影响,对它引用的对象也没有影响。这种行为被sharingall调用
a=null
在函数中的作用是将局部变量
a
指向一个新的位置——null。它不会影响外部变量
a
指向的位置,也不会影响它引用的对象。非常感谢您的详细解释!非常感谢您的详细解释!