我们以这段愚蠢的代码为例
for (let i = 0; i < 10; i++) {
console.log(
(function (x) {
if (x % 2) {
return 'even';
} else {
return 'odd';
}
})(i)
);
}
基本上,我们有一个匿名函数,它在循环内或在另一个函数内被多次调用。 我想知道它是否在循环的每次迭代中重新创建,或者是否以某种方式进行了优化? 如果您能给我一些关于如何自己找到此类东西的提示,我将不胜感激。 谢谢!
看起来比较慢:
` Chrome/122
--------------------------------------------
outline 1.00x | x100000 222 230 232 234 236
inline 2.58x | x100000 573 577 580 594 600
--------------------------------------------
https://github.com/silentmantra/benchmark `
// @benchmark inline
for (let i = 0; i < 10000; i++) {
(function (x) {
if (x % 2) {
return 'even';
} else {
return 'odd';
}
})(i)
}
// @benchmark outline
const fn = function (x) {
if (x % 2) {
return 'even';
} else {
return 'odd';
}
};
// @run
for (let i = 0; i < 10000; i++) {
fn(i)
}
/*@end*/eval(atob('e2xldCBlPWRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3Rvcigic2NyaXB0Iik7aWYoIWUubWF0Y2hlcygiW2JlbmNobWFya10iKSl7bGV0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7dC5zcmM9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9naC9zaWxlbnRtYW50cmEvYmVuY2htYXJrL2xvYWRlci5qcyIsdC5kZWZlcj0hMCxkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHQpfX0='));