我正在做2个简单的测试,并在google devtools时间轴中对其进行概要分析。
在函数外部声明变量并在for循环中为其分配新值似乎会分配大量内存,并反复触发垃圾回收器。
另一方面,在函数范围内声明变量将分配较少的内存或根本不分配任何内存。
这是第一种情况:

(function() {
  function createVars() {
    var i;
    var b;
    for (i = 0; i < 10000; i += 1) {
      b = Math.random();
    }
    requestAnimationFrame(createVars);
  };

  requestAnimationFrame(createVars);
}())



第二个:

(function() {
  var b;

  function createVars() {
    var i;
    for (i = 0; i < 10000; i += 1) {
      b = Math.random();
    }
    requestAnimationFrame(createVars);
  };

  requestAnimationFrame(createVars);
}())



我本来期望相反或至少类似的行为。

最佳答案

第一种情况,您每次调用“createVars”时都会创建一个“b”变量。
第二种情况,您仅使用一个变量。总是一样。 :)

09-25 15:37