为什么执行任务比执行任务更快?

时间:2017-12-26 12:26:08

标签: javascript

    class Obj {
      constructor() {
        this.propA = ~~(Math.random() * 255 + 0.5);
        this.propB = ~~(Math.random() * 300 + 0.5);
      }
    }
    const arr1 = new Array(100000);
    for (var i = 0; i < 100000; i ++) {
      arr1[i] = new Obj();
    }
    
    function test1() {
      let start = new Date();
      for (var times = 0; times < 1000; times ++) {
        let n = 0;
        for (var i = 0; i < 100000; i++) {
          if (arr1[i].propA > arr1[i].propB) {
            n += 1;
            //arr1[i].propB = arr1[i].propA; //<-- try uncomment it
          }
        }
      }
      
      console.log(new Date() - start + 'ms');
    }
    test1();

将此代码粘贴到开发人员工具(或新的.html文件)。

在我的电脑上(win7 x64,chrome 63),打印1200-1600ms。

然而,当我取消注释代码时,它只打印500-700毫秒。

我不知道为什么会这样......

1 个答案:

答案 0 :(得分:5)

  

我不知道为什么会这样......

因为在第一次之后

arr1[i].propB = arr1[i].propA;

已从下一次迭代中执行

if (arr1[i].propA > arr1[i].propB)

将为false,因此该行n += 1;将无法执行。

由于您通过将增量和分配替换为仅分配来保存一项操作,因此您可以看到速度的提升。