簡體   English   中英

數組表示法操作順序

[英]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.

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