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