let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
- 当我们打出上述代码并执行的时候会出现6个6,而并非是1,2,3,4,5,6.这是由于setTimeout的存在,这句代码可以理解为一会在执行后续衔接的代码,即一会在打印出i的值,但这个一会儿鉴定对于大多数朋友来说都比较模糊,我个人将其理解为在执行完该代码上一级代码后立即执行此代码,即在完成循环之后立即打印出i,而此时的i的值为6,因此打印出来的i为6,又因为此行代码执行了六次,所以输出的结果为6个6.
- 有没有什么办法可以使得代码按照大众的想法运行,输出1,2,3,4,5,6呢?当然有的,如下:
for(let i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
只需要将let声明写在for循环里面就可以使代码输出为1,2,3,4,5,6。