let i = 0for(i = 0; i<6; i++){ setTimeout(()=>{ console.log(i) },0)} //打印出6个6
出现原因:setTimeout是过一会执行,在该函数全局执行完后,i的变量已经变成了6,这时候setTimeout才开始慢悠悠的执行打印的命令;就会导致打印结果为6个6。
更改方式:
for( let i = 0; i<6; i++){ setTimeout(()=>{ console.log(i) },0) }
es6中let可以让setTimeout按照人类理想的方法去实现了,所以只需要把变量从全局变量变为let这个块级变量即可(前者的let是在全局中的)
补充:
for(var i=0;i<6;i++){setTimeout(function(){console.log(i)}(),0)}
立即执行函数也可以达成该效果,因为立即执行函数为执行后直接销毁,能够达成期望的效果
网友评论