Javascript 中函数参数的求值顺序是什么?

2023-12-24

根据我的测试,它总是从左到右

>> console.log( console.log(1), console.log(2) );
1
2
undefined undefined

但我在 ECMAScript 标准中找不到确认这一点的相关部分。


JavaScript 中的所有运算符都从左到右计算其操作数,包括函数调用运算符。首先评估要调用的函数,然后按从左到右的顺序评估实际参数。

第11.2.3节 http://es5.github.com/#x11.2.3是相关规格部分。

11.2.3 函数调用

...

2 Let func be 获取值(参考).

3 Let argList是评估的结果论点,生成参数值的内部列表(参见 11.2.4)。

...

你可以看到参数列表产生式是左递归的

11.2.4 参数列表

...

生产参数列表 : 参数列表 , 赋值表达式评价如下

and 参数列表之前评估过赋值表达式在下面的措辞中..

在 EcmaScript 3 下,一些比较运算符 (<, <=, >, >=) 从右到左评估a<=b被定义为!(b<a),但这被广泛认为是一个规范错误,主要解释器并没有以这种方式实现它,并且它在 EcmaScript 5 中得到了修复。

从语言规范来看:

11.8.5 抽象关系比较算法 http://es5.github.com/#x11.8.5 # Ⓣ

比较x < y, where x and y是价值,产生true, false, or undefined(这表明至少有一个操作数是NaN)。此外x and y该算法采用一个名为左先作为参数。该标志用于控制具有潜在可见副作用的操作的执行顺序x and y. 这是必要的,因为 ECMAScript 指定表达式从左到右的求值。默认值为左先为真并表明x参数对应于出现在左侧的表达式y参数对应的表达式。如果左先为 false,则情况相反,并且必须执行操作y before x。这样的比较执行如下:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Javascript 中函数参数的求值顺序是什么? 的相关文章

随机推荐