[英]Array Notation Order of Operations
我寫了以下代碼
o[s += "a"] = o[s += "b"] = o[s += "c"] = 0;
我很好奇為什么變量s
最終存儲“abc”而不是“cba”。 似乎代碼從右到左執行會更容易。
我好像執行器選擇並存儲索引然后決定那里有什么,但這樣做會讓它聽起來更慢,因為會有很多狀態和內存被壓入堆棧。 有人可以解釋為什么代碼按順序執行是有意義的嗎?
我已經包含了一個小提琴,還有一些例子。 http://jsfiddle.net/eggrdtuk/3/
盧克的評論是正確的。 我們可以查看MDN頁面的運算符優先級。
計算成員訪問優先級為1,賦值優先級為16.因此首先計算屬性訪問表達式,然后計算賦值操作。 此外,Computed Member Access具有從左到右的關聯性,而Assignment具有從右到左的關聯性。
因此,我們可以想到從左到右解析屬性訪問表達式的第一步:
o["a"] = o["ab"] = o["abc"] = 0
第二步是從右到左做分配:
(o["a"] = (o["ab"] = (o["abc"] = 0)))
(o["a"] = (o["ab"] = 0))
(o["a"] = 0)
我沒有看到改變任何一個步驟的關聯性會如何改變性能。 但如果有原因,我很樂意學習:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.