let var
for(let i=0;i<2;i++){ setTimeout(function(){ console.log(i) },100 ); } for(var i=0;i<2;i++){ setTimeout(function(){ console.log(i) },100 ); }
注意leth和var的区别 执行结果:0122 原理: 对于var,您有一个函数作用域,并且只有一个共享绑定用于所有循环迭代 - 即每个setTimeout回调中的i表示在循环迭代结束后最终等于6的相同变量。
让你有一个块作用域,当在for循环中使用时,你会得到每个迭代的新绑定 - 即每个setTimeout回调中的i表示一个不同的变量,每个变量都有不同的值:第一个是0, 下一个是1等