JavaScript对象更新行为(奇怪?)
我正在学习Javascript。试图理解代码JavaScript对象更新行为(奇怪?),javascript,Javascript,我正在学习Javascript。试图理解代码 函数foo(){ var a=b={name:'Hai'}; 文件。写(a.name+“”); 文件。写(b.name+“”); a、 name=‘你好’; 文件。写(a.name+“”); 文件。写(b.name+“”); }这是因为a和b都引用同一个对象{name:'Hai'}。当您更改一个变量时,更改将反映在两个变量中 var a = b = {name: 'Hai'}; 上述陈述与此基本相似(除了@NinaScholz在回答中指出的内容)
函数foo(){
var a=b={name:'Hai'};
文件。写(a.name+“
”);
文件。写(b.name+“
”);
a、 name=‘你好’;
文件。写(a.name+“
”);
文件。写(b.name+“
”);
}这是因为a
和b
都引用同一个对象{name:'Hai'}
。当您更改一个变量时,更改将反映在两个变量中
var a = b = {name: 'Hai'};
上述陈述与此基本相似(除了@NinaScholz在回答中指出的内容):
这样,a
和b
都指向内存中的同一对象,因此一个对象中的更新会自动反映到另一个对象
阅读文档中有关对象如何工作的更多信息。要了解有关对象和引用的更多信息,请参阅。尝试在一个联合分配中声明变量是一种不好的方式(而且不起作用),因为内部变量是在全局范围内声明的,而不是局部变量
函数foo(){
var a=b={name:'Hai'};
文件。写(a.name+“
”);
文件。写(b.name+“
”);
a、 name=‘你好’;
文件。写(a.name+“
”);
文件。写(b.name+“
”);
}
foo();
控制台日志(b)
在javascript中,对象和数组是通过引用传递的。顺序有点不同,因为b
是先分配的,然后是a
。这需要一个声明的变量b
,或者在非stric模式下,该变量通过使用全局声明。
var b = {name: 'Hai'};
a = b;