zhuanghaixin / Interview

8 stars 0 forks source link

var,let,const有什么区别? #218

Open zhuanghaixin opened 2 years ago

zhuanghaixin commented 2 years ago

let const

为什么let const 循环和var循环结果不同?

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循环会重新赋值,会抛出异常