在 JavaScript 中,在循环中创建函数的具体原因是什么,可能会浪费计算时间

In JavaScript, what are specific reasons why creating functions within a loop can be computationally wasteful?

本文关键字:时间 计算 是什么 创建 循环 JavaScript 函数      更新时间:2023-09-26

在 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); };
}

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

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

在循环内创建函数

通常意味着您将创建大量函数,而不仅仅是在循环外创建单个函数。

因此,这只是

一个不在循环内做资源密集型事情的问题,如果你可以在循环外做一次。当涉及到函数时,它们通常可以在循环之外创建,而无需更改代码的逻辑。