为什么VaR声明比让快

why var declaration fast than let

本文关键字:声明 VaR 为什么      更新时间:2023-09-26

'use strict'
function test() {
  let t = Date.now();
  let p = 0;
  for (let i = 0; i < 100000000; i++) {
    p += i % 2;
  }
  console.log(p)
  console.log('test: ', Date.now() - t);
}
function test1() {
  var t = Date.now();
  var p = 0;
  for (var i = 0; i < 100000000; i++) {
    p += i % 2;
  }
  console.log(p)
  console.log('test1 : ', Date.now() - t);
}
test();
test1();

在Chrome中运行上面的代码,为什么test1比test快。 是让我们的错还是我的错?

50000000
test:  1146
50000000
test1 :  148 
值得

一提的是,在 es6 中,for-loop 中的 let 关键字旨在解决 JavaScript 中臭名昭著的循环闭包问题:

var log = msg => div.innerHTML += msg + "<br>";
for (var i=0; i < 3; i++) {
  Promise.resolve().then(() => log(i)); // 3, 3, 3
}
for (let i=0; i < 3; i++) {
  Promise.resolve().then(() => log(i)); // 0, 1, 2
}
<div id="div"></div>

正如@loganfsmyth在注释中提到的,它通过有效地为循环的每次迭代创建一个新的闭包来实现这一点。

这一点,以及该功能是新功能的事实,可能是Chrome中看到的一些性能差异的原因。也就是说,对于您的特定示例,Firefox 似乎没有区别,因此浏览器似乎可以对此进行优化。