From Javascript's Kiss

在循环中操作中,如果有涉及到外部函数的,可以将外部 函数的引用储存到一个局部变量里,之后进行循环操作。如果在循环中每个循环执行的时间较长的时候,可是使用一个间隔为0的setTimeout定时器。

var work = function(i){
   var div = null;
   document.getElementById("div").appendChild((function(){
      div = document.createElement("div");
      div.innerHTML = "div" + i;
      return div;
   })());
   div = null;
}

function test(){
   Watch.start("Not local");
   for (var i = 0; i < 10000; i++) {
      work(i);
   }
   Watch.stop();
   
   Watch.start("Local")
   var w = work;
   for (var i = 0; i < 10000; i++) {
      w(i);
   }
   Watch.stop();
   
   Watch.start("Not local setTimeout");
   for (var i = 0; i < 10000; i++) {
      setTimeout(function(){
         work(i);
      }, 0);
   }
   Watch.stop();
   
   Watch.start("Local setTimeout")
   var w = work;
   for (var i = 0; i < 10000; i++) {
      setTimeout(function(){
         w(i);
      }, 0);
   }
   Watch.stop();
}

onload = function(){
   test();
   Watch.report();
}