剩余参数是否分配数组
function foo(a, b, ...rest) {
/*...*/
}
在上面的示例中,很明显创建了数组,但是这个例子呢
function foo(...rest) {
/*...*/
}
那里
rest
技术上与arguments
相同
function foo() {
console.log.apply(null, arguments)
}
所以,如果我想避免生成垃圾,我可以选择使用
arguments
还是不使用?arguments
是始终存在还是仅在函数作用域中使用关键字时存在?arguments
之间有什么区别吗?)
技术上与rest
相同arguments
arguments
对象 不是数组 但 需要转换为一个。在草率模式下,它的行为更加奇怪,对声明为参数的变量进行别名。
仅当函数中的任何代码引用它时才会创建它 - 这是一个相对琐碎的优化,但影响很大,不必为每个函数调用分配一个新对象。事实上,这种优化在 V8 中走得更远,有时甚至没有实例化对象,即使代码引用它,请参阅
arguments
是始终存在还是仅在函数作用域中使用关键字时存在?
优化参数有什么用? 和 Crankshaft 与参数对象,作者 Vyacheslav Egorov 了解详细信息。
有什么区别吗,我应该更喜欢使用在现代代码中,您通常应该更喜欢剩余参数。它们更干净(更少奇怪的行为),更具声明性(更容易理解),并且是实际的数组(以便您可以使用常用的数组方法)。它们是惯用的选择。
arguments
吗?