Open zhuanghaixin opened 2 years ago
for(let i=0;i<3;i++){ setTimeout(()=>{ console.log(i) },0) } for(const i=0;i<3;i++){ setTimeout(()=>{ console.log(i) },0) } for(var i=0;i<3;i++){ setTimeout(()=>{ console.log(i) },0) }
因为let 每次循环都会重新创建一个叫作i的同名变量,并将其初始化为计算后的只,而循环体内的调用的i不会受其他同名变量的影响,所以能在定时器的回调函数中显示正确的值,想要var有同样的效,解决异步回调问题,可以借助IIFE(立即执行函数)
for (var i = 0; i < 3; i++) { (function(n) { setTimeout(()=>{ console.log(n) } , 0) } )(i) }
const循环会重新赋值,会抛出异常
let const
为什么let const 循环和var循环结果不同?
因为let 每次循环都会重新创建一个叫作i的同名变量,并将其初始化为计算后的只,而循环体内的调用的i不会受其他同名变量的影响,所以能在定时器的回调函数中显示正确的值,想要var有同样的效,解决异步回调问题,可以借助IIFE(立即执行函数)
const循环会重新赋值,会抛出异常