【发布时间】:2015-02-23 09:36:52
【问题描述】:
如果我在使用搜索引擎方面做得不好并且已经得到解答,我会提前道歉。在这种情况下,请为我指明正确的方向。
我最近开始在函数中使用 arguments 变量,现在我需要对它进行切片。我所看到的每一个地方,人们都在做这样的事情:
function getArguments(args, start) {
return Array.prototype.slice.call(args, start);
}
根据 MDN,这对性能不利:
您不应该对参数进行切片,因为它会妨碍 JavaScript 引擎(例如 V8)中的优化。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments
我没有看到有人做这样的事情是有原因的吗:
function getArguments(args, start) {
var i, p = 0;
var len = args.length;
var params = [];
for (i = start; i < len; ++i) {
params[p] = args[i];
p += 1;
}
return params;
}
你得到你想要的参数,并且没有进行切片。所以从我的角度来看,你不会在这方面失去任何东西,也许它会使用一些额外的内存并且速度会稍微慢一些,但并没有真正发挥作用,对吧?
只是想知道我这里的逻辑是否有缺陷。
【问题讨论】:
-
将
arguments传递给另一个函数也会阻止优化。所以这和切片一样糟糕。 -
这种微优化对大多数程序没有太大的影响。我只是切片然后收工。
-
同意@elclanrs。不用担心,在你写超高负载的程序之前,用slice就行了,听说浏览器优化就够了。
标签: javascript arguments