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
指向的位置,也不会影响它引用的对象。非常感谢您的详细解释!非常感谢您的详细解释!