有什么区别
function(...args) {
// args is an array
}
和
function() {
// arguments is an array-like
}
既然将类数组转换为数组非常容易,那么还有其他区别吗?
类似的问题:
myFunction.apply(null, args);
和
myFunction(...args);
...args
是新的;直到 ES6 才可用function(foo, bar, ...others)
Array.prototype.slice.call(arguments, 0)
...args
对于代码阅读者来说更明显但是,作为 1 的推论,并非所有事物都支持它。
回复:
apply()
和传播之间的差异(当通过null
或例如示例中的thisArg
到apply()
时):
myFunction.apply(null, args);
myFunction(...args);
除了 spread 是新的,因此目前没有得到广泛支持之外,
apply()
接受数组或类似数组的参数对象,而 spread 将适用于任何可迭代对象。例如,您可以将 Set
或 Map
作为参数传播,但无法将其作为 argArray
参数传递给 apply()
(尽管您当然可以将其作为 call()
的参数传播: myFunction.call(whatever, ...someIterable)
)。
既然将类数组转换为数组非常容易,那么还有其他区别吗?
对于
arguments
来说,这并不是那么容易。做错了(或者根本做错了)可能会导致 JS 引擎去优化该函数,如果有正确的方法可以避免需要烦人的样板来完成它。
剩余参数与实际参数之间有四个主要区别 参数对象: