我正在将一种语言的编译器优化为 JavaScript,并发现了一个非常有趣(如果不是令人沮丧)的案例:
function add(n,m) {
return n === 0 ? m : add(n - 1, m) + 1;
};
var s = 0;
for (var i = 0; i < 100000; ++i) {
s += add(4000, 4000);
}
console.log(s);
它需要2.3s在我的机器上完成[1]。但如果我做一个很小的改变:
function add(n,m) {
return (() => n === 0 ? m : add(n - 1, m) + 1)();
};
var s = 0;
for (var i = 0; i < 100000; ++i) {
s += add(4000, 4000);
}
console.log(s);
它完成于1.1s. (() => ...)()请注意,唯一的区别是在 的返回周围添加了立即调用的 lambda add。为什么这个添加的调用使我的程序速度提高了一倍?
[1] MacBook Pro 13 英寸 2020,2.3 GHz 四核 Intel Core i7,Node.js v15.3.0
慕的地6264312
相关分类