let 与var 实战区别


for (var i = 0; i < 100; i++) {
    setTimeout(function () {
        console.log(i);    //100
    }, 100)
};
for (let i = 0; i < 100; i++) {
    setTimeout(function () {
        console.log(i);   //0-99
    }, 100)
};
  1. let 与var声明变量的区别,var 声明的是全局作用域的i;在全局都有效,所以全局只有一个i,所以每次打印i指向的都是全局的i,所以直接输出的最后一轮打印结果100;
  2. let 变量声明的是当前作用域,当前声明的i只在本轮循环有效,所以每次都是一个新的变量,左后输出的是0-99;
  3. 你可能会问,如果每一轮循环的变量i都是重新声明的,那它怎么知道上一轮循环的值,从而计算出本轮循环的值?这是因为 JavaScript 引擎内部会记住上一轮循环的值,初始化本轮的变量i时,就在上一轮循环的基础上进行计算。