在JavaScript中,为什么在循环中创建函数的具体原因可能是计算上的浪费?
在道格拉斯克罗克福德的JavaScript第39页上,“避免在循环中创建函数.它可能在计算上浪费”.我似乎无法弄清楚为什么在循环中创建函数会比外部更浪费.
解决方法:
因为您正在创建多个Function对象而不是仅重用一个.
创建相同功能的示例…
for (var i = 0; i < 10; i++) {
// v--creating identical function in each iteration.
(function(j) {
var el = document.createElement('a');
el.onclick = function() { alert(j); };
document.body.appendChild(el);
})(i);
}
重用命名函数的示例…
for (var i = 0; i < 10; i++) {
var el = document.createElement('a');
// ----------v---calling a reusable function
el.onclick = createHandler(i);
document.body.appendChild(el);
}
function createHandler(j) {
return function() { alert(j); };
}
这两个示例具有相同的结果,但第二个示例不需要在循环期间生成两个函数的开销.相反,它只创建一个处理程序.