中有什么函数参数和参数之间......区别
问题描述:
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的推论,not everything supports it yet。
答
重新:(经过时null
或如thisArg
到apply()
如示例)apply()
和传播之间的差异:
myFunction.apply(null, args);
myFunction(...args);
从传播
除了能新望,所以没有被广泛当前支持apply()
接受一个数组或类似数组的对象的参数,而传播将在任何可迭代的工作。例如,您可以传播一个Set
或Map
作为参数,而您不能将它作为argArray
的参数传递给apply()
(尽管您当然可以将它作为参数传播给call()
:myFunction.call(whatever, ...someIterable)
)。
由于将数组转换为数组非常容易,还有其他区别吗?
这对arguments
并不那么容易。做错了(或者根本不可能)会导致JS引擎去优化函数,如果有正确的方法来避免它需要恼人的样板来做。
+0
谢谢!可迭代的东西很容易被误解为IMO。 – stevemao
opps yes。错字... – stevemao
肯定[快速google](https://www.google.ca/search?q=javascript+%22...args%22+vs+arguments&oq=javascript+%22...args%22+ vs +参数)会在这里工作?点击第一次点击,搜索“...”,即将发布的信息? –
@Mike'args'是一个任意名称,所以如果您打算期待标题为* Arguments object *的页面来处理其余参数,那么您可能只需搜索* javascript参数*。当然,如果你知道他们被称为休息参数,这将是一个更好的搜索。 – JMM