根据我的测试,它总是从左到右
>> console.log( console.log(1), console.log(2) );
1
2
undefined undefined
Run Code Online (Sandbox Code Playgroud)
但我找不到相关部分在ECMAScript标准中确认这一点.
Mik*_*uel 17
JavaScript中的所有运算符都从左到右评估它们的操作数,包括函数调用运算符.首先,按从左到右的顺序评估调用函数的实际参数.
第11.2.3节是相关的规范部分.
11.2.3函数调用
...
2让func为GetValue(ref).
3让argList成为评估Arguments的结果,生成一个参数值的内部列表(见11.2.4).
...
你可以看到ArgumentList的产生是左递归的
11.2.4参数列表
...
生成ArgumentList:ArgumentList
,AssignmentExpression的计算方法如下
并且在下面的措辞中,在AssignmentExpression之前评估ArgumentList.
在EcmaScript的3一些比较操作符(<,<=,>,>=)评估从右到左,因为a<=b在来定义!(b<a),但被广泛认为是一个规范的错误,主要的解释并没有实现它的方式,它被固定在ECMAScript中5 .
从语言规范:
比较
x < y,其中x和y是值,产生true,false或undefined(表示至少有一个操作数NaN).除了x和y算法有一个名为布尔标志LeftFirst作为参数.该标志被用于控制在其与潜在的可见的副作用操作所执行的顺序x和y.这是必要的,因为ECMAScript指定从左到右的表达式评估.LeftFirst的默认值为true,表示该x参数对应于参数对应表达式左侧的y表达式.如果LeftFirst为false,则情况相反,必须在y之前执行操作x.这样的比较如下进行:
Šim*_*das 13
它在这里定义:
生产
ArgumentList : ArgumentList , AssignmentExpression评估如下:
- 让我们
precedingArgs评估的结果ArgumentList.- 让我们
ref评估的结果AssignmentExpression.- 我们
arg是GetValue(ref).- 返回一个List,其长度大于1的长度,
precedingArgs其项目的项目precedingArgs按顺序排列,arg最后是新列表的最后一项.
请阅读: http ://es5.github.com/#x11.2.4
调用函数时,传入的参数从左到右进行计算.
| 归档时间: |
|
| 查看次数: |
3940 次 |
| 最近记录: |