中有什么函数参数和参数之间......区别

问题描述:

什么中有什么函数参数和参数之间......区别

function(...args) { 
    // args is an array 
} 

function() { 
    // arguments is an array-like 
} 

因为它很容易转换一个类似数组的数组之间的区别,有没有还有其他的区别吗

类似的问题:

myFunction.apply(null, args); 

myFunction(...args); 
+0

opps yes。错字... – stevemao

+0

肯定[快速google](https://www.google.ca/search?q=javascript+%22...args%22+vs+arguments&oq=javascript+%22...args%22+ vs +参数)会在这里工作?点击第一次点击,搜索“...”,即将发布的信息? –

+0

@Mike'args'是一个任意名称,所以如果您打算期待标题为* Arguments object *的页面来处理其余参数,那么您可能只需搜索* javascript参数*。当然,如果你知道他们被称为休息参数,这将是一个更好的搜索。 – JMM

  1. ...args是新的;不可用,直到ES6
  2. 您可以使用它的参数结构的一部分:function(foo, bar, ...others)
  3. 你得到一个数组,所以没有更多的Array.prototype.slice.call(arguments, 0)
  4. ...args是比较明显的代码读者
  5. 现在,我们有比赛和打火机,我们不需要搓棍子来制造火灾

然而,作为1的推论,not everything supports it yet

重新:(经过时null或如thisArgapply()如示例)apply()和传播之间的差异:

myFunction.apply(null, args); 
myFunction(...args); 
从传播

除了能新望,所以没有被广泛当前支持apply()接受一个数组或类似数组的对象的参数,而传播将在任何可迭代的工作。例如,您可以传播一个SetMap作为参数,而您不能将它作为argArray的参数传递给apply()(尽管您当然可以将它作为参数传播给call()myFunction.call(whatever, ...someIterable))。

由于将数组转换为数组非常容易,还有其他区别吗?

这对arguments并不那么容易。做错了(或者根本不可能)会导致JS引擎去优化函数,如果有正确的方法来避免它需要恼人的样板来做。

+0

谢谢!可迭代的东西很容易被误解为IMO。 – stevemao