繁体   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