考虑以下关于参考ECMAScript语言规范的答案响应- 11.13.2化合物分配
考虑为什么这些,
javascript:
o=""; o = o + (o+=1) ; alert(o);
o=""; o = (o+=1) + o; alert(o);
Run Code Online (Sandbox Code Playgroud)
不一样.从左到右的脚本评估存在时间语义问题(参考:ECMA规范. - 加法运算符).一个结果是+
操作员不一定是可交换的.
这可以通过以下方式看出:
javascript:
o=1; o = o + (o+=1) ; alert(o);
o=1; o = (o+=1) + o; alert(o);
Run Code Online (Sandbox Code Playgroud)
要么
javascript:
o=" _ "; o = o + (o+=1) ; alert(o);
o=" _ "; o = (o+=1) + o; alert(o);
Run Code Online (Sandbox Code Playgroud)
懒惰的评估范例,由我错误地和不恰当地使用从而产生下面的问题,也是我个人工作方式的一个不好的属性.
以下考虑因素可能已经得到解决,但似乎没有.如果是这样,是否可以提供与讨论的链接?
Gecko Javascript运行时引擎的正式指称语义是一个谜.经验测试令人筋疲力尽,无法详尽无遗.
参考文献ECMAScript语言规范似乎不够,但是为这些脚本的混合提供了信任,例如, …
javascript javascript-engine formal-semantics denotational-semantics