话不多说,先看题
let i
for(i=0;i<6;i++){
setTimeout(()=>console.log(i),1000)
}
这段代码最终会打印出什么呢?我第一反应是1,2,3,4,5。实际上却是6个6
为什么呢?
因为setTimeout是延后执行的,1000表示的是1000ms后,尽快执行。需要等for循环结束后才会执行setTimeout。结果堆积了6个setTimeout,自然是6个6
那如何让他打印出1,2,3,4,5呢?
用一个j存储当前i的值即可,如图所示,每次进行for循环,都会用j存储当前i的值,当然,此j非彼j,每个j的值都是不一样的。
后来javascript看大家写的这么痛苦,于是后面对语法进行了改进
你可以直接这么写
把let写在里面,就可以打印出1,2,3,4,5了。实际上这就是一个语法糖。