在 JavaScript 中,为什么在循环中创建函数会造成计算上的浪费的具体原因是什么?
在 JavaScript the Good Parts 的第 39 页上,Douglas Crockford 指出,“避免在循环中创建函数。这可能会造成计算上的浪费”。我似乎无法弄清楚为什么在循环中创建函数会比在外部更浪费。
在 JavaScript 中,为什么在循环中创建函数会造成计算上的浪费的具体原因是什么?
在 JavaScript the Good Parts 的第 39 页上,Douglas Crockford 指出,“避免在循环中创建函数。这可能会造成计算上的浪费”。我似乎无法弄清楚为什么在循环中创建函数会比在外部更浪费。
因为您正在创建多个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); };
}
这两个示例具有相同的结果,但第二个示例不需要在循环期间创建两个函数的开销。相反,它只创建一个处理程序。
创建一个函数会占用大量资源。由于函数实际上是对象,因此代码每次都必须实际创建一个新的函数对象,不能只创建一次然后重用它。
在循环内创建一个函数通常意味着您将创建很多函数,而不仅仅是在循环外创建一个函数。
因此,如果您可以在循环外执行一次,则只需不在循环内执行资源密集型操作即可。当涉及到函数时,它们通常可以在循环之外创建,而无需更改代码的逻辑。