為什么a.x不存在,而b.x存在呢? 結果為什么?


uj5u.com熱心網友回復:
如果變數是之前已有記憶體(堆{n:1})的屬性(不管之前有沒有存在,沒有存在就創建然后指向null先),然后用該堆中物件的該屬性指向{n:2},剛好說明了b.x為什么也指向{n:2},因為恰好b也指向該堆中的記憶體,而a.x為undefine因為執行a.x=a={n:2}的時候,a.x根本就不是操作a執行新的記憶體{n:2}的屬性,所以a.x為undefine。js在 執行 a = b (賦值運算式)的時候,先把左邊的變數的堆疊(有可能是堆中的變數a.x)確定下來,然后再賦值,所以a.x=a={n:2}和a=a.x={n:2}一樣,因為左邊的變數已經確定下來了總結:
在連等賦值的時候,各個左邊的變數賦值都是同時的(沒有順序),執行的是賦值的瞬間哪個物件的記憶體操作,比如a.x={n:2}此時的a物件是{n:1},而a={n:2}僅僅是a變數而已(而非物件記憶體),這樣應該好理解了
uj5u.com熱心網友回復:
這個好理解轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/15369.html
標籤:JavaScript
上一篇:nth-child
