4

在 JavaScript 中,为什么在循环中创建函数会造成计算上的浪费的具体原因是什么?

在 JavaScript the Good Parts 的第 39 页上,Douglas Crockford 指出,“避免在循环中创建函数。这可能会造成计算上的浪费”。我似乎无法弄清楚为什么在循环中创建函数会比在外部更浪费。

4

2 回答 2

5

因为您正在创建多个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); };
}

这两个示例具有相同的结果,但第二个示例不需要在循环期间创建两个函数的开销。相反,它只创建一个处理程序。

于 2012-05-31T13:39:57.507 回答
2

创建一个函数会占用大量资源。由于函数实际上是对象,因此代码每次都必须实际创建一个新的函数对象,不能只创建一次然后重用它。

在循环内创建一个函数通常意味着您将创建很多函数,而不仅仅是在循环外创建一个函数。

因此,如果您可以在循环外执行一次,则只需不在循环内执行资源密集型操作即可。当涉及到函数时,它们通常可以在循环之外创建,而无需更改代码的逻辑。

于 2012-05-31T13:42:21.280 回答