说我有这个:
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的参数可以用除了从左到右的任何其他顺序来解决吗?
答案 0 :(得分:4)
是的,参数评估的顺序保证是从左到右。
根据ES5规范的11.2.3和11.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)