js (v8) 剩余参数和 gc

问题描述 投票:0回答:1

剩余参数是否分配数组

function foo(a, b, ...rest) {
/*...*/
}

在上面的示例中,很明显创建了数组,但是这个例子呢

function foo(...rest) {
/*...*/
}

那里

rest
技术上与
arguments

相同
function foo() {
   console.log.apply(null, arguments)
}

所以,如果我想避免生成垃圾,我可以选择使用

arguments
还是不使用?
另外,
arguments
是始终存在还是仅在函数作用域中使用关键字时存在?
(如果总是,我认为使用它可能会更好,如果不是,休息和
arguments
之间有什么区别吗?)

javascript garbage-collection v8
1个回答
0
投票

rest
技术上与
arguments

相同

其实不然。其余参数创建一个正确的数组,而众所周知的

arguments
对象 不是数组 需要转换为一个。在草率模式下,它的行为更加奇怪对声明为参数的变量进行别名。

arguments

是始终存在还是仅在函数作用域中使用关键字时存在?

仅当函数中的任何代码引用它时才会创建它 - 这是一个相对琐碎的优化,但影响很大,不必为每个函数调用分配一个新对象。事实上,这种优化在 V8 中走得更远,有时甚至没有实例化对象,即使代码引用它,请参阅

优化参数有什么用?Crankshaft 与参数对象,作者 Vyacheslav Egorov 了解详细信息。

有什么区别吗,我应该更喜欢使用

arguments

吗?

在现代代码中,您通常应该更喜欢剩余参数。它们更干净(更少奇怪的行为),更具声明性(更容易理解),并且是实际的数组(以便您可以使用常用的数组方法)。它们是惯用的选择。

© www.soinside.com 2019 - 2024. All rights reserved.