2017-06-11 24 views
-1
function unshift(array, ...int) { 
    return [...int].concat(array); 
} 

function unshift(...array, ...int) { 
    return [...int, ...array]; 
} 

第一个函数很好但不是第二个函数,所以在函数中没有多重休息参数这样的事情?参数列表中不允许多余的运算符?

+6

它将使什么意义?你期望数组完成和int开始? – RaphaMex

+2

要迂腐,这不是“休息操作员”。它是“休息参数语法”或“休息参数表示法”。 –

回答

2

正确。除了SyntaxError中的最后结果之外,还可以在任何参数上使用Rest运算符。

而且很有道理......

的参数,其余运营商告诉编译器获取所有剩余的参数。如果第一个参数有一个休息运算符,它将获取所有参数,之后的任何后续参数将为undefined

因此,Rest参数只能在参数列表中的最后一个参数上。

在使用实例

function foo(bar, ...baz) { 
    console.log(bar); 
    console.log(baz); 
} 

foo(1, 2, 3, 4); 
// 1 
// [2, 3, 4] 

如果在一些光怪陆离的世界,其余的参数可以是第一诸多因素的影响,那么我们就会有这样的事情

// NOT VALID JS 
function foo(...bar, baz) { 
    console.log(bar); 
    console.log(baz); 
} 

foo(1, 2, 3, 4); 
// [1, 2, 3, 4] 
// undefined 

什么用那会是...?

+0

你的第二个例子有一个合理的解释:'bar'会是'[1,2,3]'而baz'会是'4'。为什么不能被支持? –

+0

@torazaburo:这是一个公平的观点。我的怀疑是,正如现在所定义的那样,其余的操作员总是意味着1件事,即'把剩下的一切都拿走(休息一下)“。如果规则可能以这种方式弯曲,我会怀疑规范(和使用)会变得相当复杂......但这只是我的猜测...... – sfletche

3

其余参数必须是最后一次正式参数 错误:

function f(a, ...b, c) { 
// ... 
} 

权:

function f(a, b, ...c) { 
// ... 
}