Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript对象更新行为(奇怪?)_Javascript - Fatal编程技术网

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在回答中指出的内容)

我正在学习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在回答中指出的内容):

这样,
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;