gpt4 book ai didi

javascript - `arguments` 增加了运行时间(神秘地)

转载 作者:行者123 更新时间:2023-11-29 15:41:13 26 4
gpt4 key购买 nike

我实现了一个简单的轻量级 every 函数。我注意到,如果变量 arguments 以某种方式在函数内部使用 - 它会将运行时间从 800 毫秒 增加1300 ms(在我的例子中)。是什么原因造成的?

我使用 Chrome 29.0.1547.66 m

http://jsfiddle.net/4znzy/

function myEvery(list, fun, withArgument) {
var i;

fun = fun || function(val) { return val };

arguments; // with this statement the time is 1300 ms
// if you comment it out -- 800 ms

for (i = 0; i < list.length; i++) {
if (!fun.call(list, list[i], i)) {
return false;
}
}

return true;
};

// Create a huge array
var list = [];
for (i = 1; i < 20000000; i++) {
list.push(i);
}

// Measure the time
t1 = (new Date).getTime();
myEvery(list);
t2 = (new Date).getTime();

alert(t2 - t1);

(如果以执行arguments语句本身的时间来衡量,则为0毫秒。)

最佳答案

arguments 的出现就像函数参数的动态 getter,必须从堆栈中读取并复制。像您的 list 参数这样的大对象(不仅大而且很多)也必须被复制

您可以通过将 arguments 行替换为

来看到这一点
var args = [list.slice(0)]; // copy parameter

这导致了相似的时间。在我的机器上,另外 150 个带有 arguments 和 200 个带有 slice()

根据 JS 引擎的实现,这会更慢或更快,但肯定会增加执行时间。 可能(尚未测试)不同浏览器或替代 JS 引擎之间存在相当大的差异。

关于javascript - `arguments` 增加了运行时间(神秘地),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18651080/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com