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毫秒。
我不知道为什么会这样......
答案 0 :(得分:5)
我不知道为什么会这样......
因为在第一次之后
arr1[i].propB = arr1[i].propA;
已从下一次迭代中执行
if (arr1[i].propA > arr1[i].propB)
将为false
,因此该行n += 1;
将无法执行。
由于您通过将增量和分配替换为仅分配来保存一项操作,因此您可以看到速度的提升。