簡體   English   中英

JavaScript對象更新行為(奇怪?)

[英]JavaScript object update behavior (weird ?)

我正在學習Javascript。 試圖了解代碼,

 function foo (){ var a = b = {name: 'Hai'}; document.write(a.name +'<br>'); document.write(b.name +'<br>'); a.name = 'Hello'; document.write(a.name +'<br>'); document.write(b.name +'<br>'); } 

輸出如下,



你好
你好

確實,分配是從右到左進行的,但更新同時影響兩個方向。 這是怎么運作的? 有人可以解釋嗎?

這是因為ab都引用相同的對象{name: 'Hai'} 當您更改一個時,更改將反映在兩個變量中。

var a = b = {name: 'Hai'};

上面的語句基本上與此語句類似(@NinaScholz在回答中指出的除外):

var b = {name: 'Hai'};
a = b;

這樣, ab都指向內存中的同一對象,因此,其中一個的更新會自動反映到另一個。

此處的文檔中了解有關對象如何工作的更多信息。 要了解有關對象和引用的更多信息,請參考此鏈接

嘗試在一個聯合聲明中聲明變量是一種不好的風格(並且不起作用 ),因為內部變量是在全局范圍中聲明的,而不是在局部變量中聲明的。

 function foo (){ var a = b = {name: 'Hai'}; document.write(a.name +'<br>'); document.write(b.name +'<br>'); a.name = 'Hello'; document.write(a.name +'<br>'); document.write(b.name +'<br>'); } foo(); console.log(b); 

在嚴格模式下,您會得到一個錯誤,因為您使用了一個沒有聲明的變量。

 'use strict'; function foo (){ var a = b = {name: 'Hai'}; document.write(a.name +'<br>'); document.write(b.name +'<br>'); a.name = 'Hello'; document.write(a.name +'<br>'); document.write(b.name +'<br>'); } foo(); console.log(b); 

真正的執行順序是

var a = (b = {name: 'Hai'});

首先評估內部表達,然后評估外部

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM