我想测试在for循环中使用箭头函数是否比使用全局函数慢得多。令我惊讶的是,在所有经过测试的浏览器(Chrome,Edge,Firefox)中,for循环中的箭头函数比全局函数快5-10倍。
我创建了一个jsperf here。
这是最初的循环:
for(let i = 0; i <= N; ++i) {
(i) => sum += i;
(sum, i) => sum += i;
}
以下我认为应该更快:
for(let i = 0; i <= N; ++i) {
add(i);
addTwo(sum, i);
}
添加函数只是全局函数:
function add(i) {
return sum += i;
}
function addTwo(sum, i) {
return sum += i;
}
不应该重复使用全局函数比在每次迭代时创建箭头函数更快吗?
LE 测试代码错了,我实际上并没有调用箭头函数,现在我将其更新为:
for(let i = 0; i <= N; ++i) {
((i) => sum += arr[i])();
((sum, i) => sum += arr[i])();
}
现在看来,正如预期的那样,全局函数方法现在更快(在Chrome上为x2,在Firefox上为x300,在Edge上为x20)。
答案 0 :(得分:0)
你不会创造一个新的&#34;每次迭代时的箭头功能。当js解析你的脚本时,该函数被设置一次,它只会在每次迭代时创建一个闭包。但是当你不调用函数时,根本不需要闭包,你的for循环什么都不做,因此速度很快。