摘要:連續賦值今天看到一個面試題,一直想把這個題目解析更加直觀化,就跟看小人書一樣,看圖就能明白其中的原理,所以用做了幾張圖。
連續賦值
今天看到一個面試題,一直想把這個題目解析更加直觀化,就跟看小人書一樣,看圖就能明白其中的原理,所以用PPT做了幾張圖。
var a = {n: 1} var b = a; a.x = a = {n: 2} console.log(a.x); console.log(b.x)
這塊最難理解的就是這塊
a.x = a = {n: 2}
接下來我們從以下幾點分析以下:
運算符優先級;
`我們知道運算符的優先級決定了表達式中運算執行的先后順序,優先級高的運算符最先被執行。` 賦值運算順序是從右往左的,不過由于“.”是優先級最高的運算符,所以這行代碼先“計算”了a.x;
優先級 | 運算類型 | 關聯性 | 運算符 |
---|---|---|---|
19 | 成員訪問 | 從左到右 | … . … |
3 | 賦值 | 從右到左 | … = … |
鏈接: 運算符優先級
堆棧圖來看怎么賦值操作的;
var a={n:1}; a指向了堆內存中的對象{n:1}, var b=a; a賦予給b的時候傳的是棧中的地址(相當于新建了一個不同名“指針”) ,而不是堆內存中的對象。
a.x = a = {n: 2} ;前面說了“.”的優先級大于賦值運算符的優先級,所以先來看a.x;a.x實際上是未定義的;
再來看賦值運算符的從右向左解析;a = {n : 2},a被從新賦值,指向了一個新對象,而此時a.x已經先行執行完,其實指是{ n:1,x: undefined } 這個對象,接下來看左邊的等號,這個對象的x值 = 等號右邊計算的結果(a={n:2},所以此時b的值通過箭頭可以看出等于{n:1,x:{n:2}},a的值指向新對象{n:2}
以上如有出入,請多指正~~~
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/109228.html
摘要:值類型基本類型和棧內存值類型也稱為原始數據或原始值這類值存儲在棧內存中基本類型的值不可以修改。目前中的基本類型一共有六種。堆的使用規則當創建數組時,就會在堆內存中創建一個數組對象,并且在棧內存中創建一個對數組的引用。 值類型(基本類型)和棧內存 值類型也稱為原始數據或原始值(primitive value).這類值存儲在棧(stack)內存中, 基本類型的值不可以修改。每當我們定義一個...
摘要:引擎對堆內存中的對象進行分代管理新生代存活周期較短的對象,如臨時變量字符串等。內存泄漏對于持續運行的服務進程,必須及時釋放不再用到的內存。 (關注福利,關注本公眾號回復[資料]領取優質前端視頻,包括Vue、React、Node源碼和實戰、面試指導) 本周正式開始前端進階的第一期,本周的主題是調用堆棧,今天是第4天。 本計劃一共28期,每期重點攻克一個面試重難點,如果你還不了解本進階計劃...
摘要:引言半月刊第四期來啦,這段時間新增了道高頻面試題,今天就把最近半月匯總的面試題和部分答案發給大家,幫助大家查漏補缺,歡迎加群互相學習。更多更全的面試題和答案匯總在下面的項目中,點擊查看。引言 半月刊第四期來啦,這段時間 Daily-Interview-Question 新增了 14 道高頻面試題,今天就把最近半月匯總的面試題和部分答案發給大家,幫助大家查漏補缺,歡迎 加群 互相學習。 更多更...
摘要:有這樣一個熱門問題其實這個問題很好理解,關鍵要弄清下面兩個知識點引擎對賦值表達式的處理過程賦值運算的右結合性一賦值表達式形如的表達式稱為賦值表達式。賦值表達式是右結合的。 有這樣一個熱門問題: var a = {n: 1}; var b = a; a.x = a = {n: 2}; alert(a.x); // --> undefined alert(b.x); // --> {n: ...
閱讀 2877·2021-10-14 09:43
閱讀 1671·2021-09-29 09:34
閱讀 1755·2021-07-28 00:16
閱讀 2970·2019-08-30 15:53
閱讀 2914·2019-08-30 13:59
閱讀 2970·2019-08-30 13:57
閱讀 1100·2019-08-26 13:38
閱讀 1901·2019-08-26 13:25