【发布时间】:2010-11-27 01:04:16
【问题描述】:
我想写这样的东西(在 Javascript 中):
var obj = { left: left, right: -(left += increment) };
如果我可以确定属性值将按照我编写它们的相同顺序进行评估,这只会做我想做的事情。语言是否在任何地方做出这样的保证?
【问题讨论】:
标签: javascript
我想写这样的东西(在 Javascript 中):
var obj = { left: left, right: -(left += increment) };
如果我可以确定属性值将按照我编写它们的相同顺序进行评估,这只会做我想做的事情。语言是否在任何地方做出这样的保证?
【问题讨论】:
标签: javascript
来自ECMA 3rd Edition specifications:
ECMAScript 的源文本 程序首先转换为 输入元素的序列,它们是 无论是令牌,行终止符, cmets 或空白空间。来源 文本从左到右扫描, 反复服用尽可能长的时间 字符序列作为下一个 输入元素。
换句话说,是的,规范解决了这个问题。此代码应始终有效:
var left = 5, increment = 1;
var obj = { left: left, right: -(left += increment) };
// obj.left === 5
// obj.right === -6
这与属性存储在对象中的顺序无关,而是 JavaScript 评估语句的顺序:从左到右,从上到下。
【讨论】: