JS 函数的执行时机
解释为什么如下代码会打印 6 个 6
let i = 0 for(i = 0; i<6; i++){ setTimeout(()=>{ console.log(i) },0) }
在for循环执行时i的值按照0,1,2,3,4,5值的变化,最后i的值是5,5小于6,i++,5变成6。i本该在条件表达式i<6的判断时被中断,但又因为setTimeout是异步的,for结束以后setTimeout把计算结束后的i=6打印出来了,setTimeout
运行6次所以打印了6次
写出让上面代码打印 0、1、2、3、4、5 的方法
for(let i = 0; i<6; i++){ setTimeout(()=>{ console.log(i) },0) }
//js在for和let一起用的时候会加东西
//每次循环会多创建一个i
(可选内容)除了使用 for let 配合,还有什么其他方法可以打印出 0、1、2、3、4、5
因为setTimeOut()是异步执行,所以我们让它立即执行就可以了。
for (var i = 0; i < 6; i++) { !function(i){ setTimeout(function() { console.log(i); }, 100 * i); }(i) }
这段函数会让JS检测到setTimeOut时不再放到队列中进行等待,而是立即运行setTimeOut()。所以能按我们所想的进行输出。