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

The*_*ent 4 javascript loops computation

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

在道格拉斯克罗克福德的JavaScript第39页上,"避免在循环中创建函数.它可能在计算上浪费".我似乎无法弄清楚为什么在循环中创建函数会比外部更浪费.

小智 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);
}
Run Code Online (Sandbox Code Playgroud)

重用命名函数的示例...

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); };
}
Run Code Online (Sandbox Code Playgroud)

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

  • 很好的例子,代码有一种比文字更好地解释事物的方法!谢谢. (2认同)