是否保证解析函数参数的顺序?

时间:2017-03-31 18:06:45

标签: javascript

说我有这个:

function write3(a, b, c) {
  document.write(a + " " + b + " " + c);
}

var arr = [1, 2, 3];
var i = 0;

write3(arr[i++], arr[i++], arr[i++]);

按预期产生1 2 3,但是,我不确定这是否是保证行为。假设传递给write3的参数可以用除了从左到右的任何其他顺序来解决吗?

3 个答案:

答案 0 :(得分:4)

是的,参数评估的顺序保证是从左到右。

根据ES5规范的11.2.311.2.4部分,函数参数是参数列表,参数列表应始终从左到右进行评估。

具体来说,对要调用的函数进行求值,然后从左到右对函数的参数进行求值。

答案 1 :(得分:2)

  

假设传递给write3的参数是否可以按照从左到右的顺序解决?

不,他们将始终从左到右解决。这是行为保证。

我也觉得我应该指出你可以使用apply调用一个包含参数数组的函数:

write3.apply(null, arr)

。 。 。或ES6 +中的spread operator(可能并非所有浏览器都支持):

write3(...arr)

<小时/>

演示片段:

function write3(a, b, c) {
  document.write(a + " " + b + " " + c)
}

var arr = [1, 2, 3]

write3.apply(null, arr)

write3(...arr)

答案 2 :(得分:0)

后记。如果你使用ES6,你可以写:

write3(...arr)