首先需要举一个例子:
let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
以上代码中先初始化函数值为0,然后每次循环打印出当前函数并++,正常情况下会打印出0,1,2,3,4,5,但是循环中存在setTimeout,该方法的作用是让当前代码执行完之后再执行该语句,当执行完该循环的时候,最后的值是6,所以最后打印出来的结果应该是6个6。
这个时候如果稍微做出一个改动,把let i=0直接放到for循环中声明,变成for(let i = 0; i<6; i++){<br /> setTimeout(()=>{<br /> console.log(i)<br /> },0)<br /> }
这时打印的结果就会发生变化,变成0,1,2,3,4,5,虽然有些不符合程序逻辑,但是这个是JS对新手做出的妥协,有些新手很难理解setTimeout为什么会执行出6个6,最后JS为了迎合这些新手直接把规则改成了“当JS中for和let在一起用的时候,每次循环都会多创建一个i,用于存储每次循环的结果”,虽然在一般人看来,这非常不符合逻辑。