注册 登录
编程论坛 JavaScript论坛

求教一个问题,关于for的块作用域

xuegao123 发布于 2022-07-14 15:52, 910 次点击
按照我的理解,以下两个代码实现的功能应该是一样的,为啥输出不一样:
代码一:
程序代码:

for (let i=0;i<=1;i++)
{
    setTimeout(()=>{console.log(i)},1000)
}
//output: 0 1


代码二:
程序代码:

{
    let i=0
    {
        setTimeout(()=>{console.log(i)},1000)
    }
    i++
    {
        setTimeout(()=>{console.log(i)},1000)
    }
}
//output: 1 1
1 回复
#2
claver2022-08-15 17:45
i 的作用域不一样,
代码二中的 i 相对于代码
程序代码:

{
    setTimeout(()=>{console.log(i)},1000)
}


而言,是外部变量,你需要这样才能得到一样的结果:
程序代码:

{
    {
        let i=0
        setTimeout(()=>{console.log(i)},1000)
    }
    {
        let i = 1
        setTimeout(()=>{console.log(i)},1000)
    }
}
1