0
点赞
收藏
分享

微信扫一扫

let 声明在for循环语句中可以拿到正确作用域

let声明在for循环语句中可以拿到正确的作用域

for (var i = 0;i<10;i++)
{
setTimeout(function(){console.log(i);},100*i); // 10个10
}

console.log('====')
console.log(i) //10
console.log('====')



for (let i = 0;i<10;i++)
{
setTimeout(function(){console.log(i);},100*i); // 0到9
}

console.log('====')
console.log(i) // i is not defined
console.log('====')

当用​​let​​声明一个变量,它使用的是词法作用域块作用域。 不同于使用 ​​var​​​声明的变量那样可以在包含它们的函数外访问,块作用域变量在包含它们的块或​​for​​循环之外是不能访问的。

当​​let​​声明出现在循环体里时拥有完全不同的行为。 不仅是在循环里引入了一个新的变量环境,而是针对 每次迭代都会创建这样一个新作用域。 这就是我们在使用立即执行的函数表达式时做的事,所以在 ​​setTimeout​​​例子里我们仅使用​​let​​声明就可以了。



举报

相关推荐

0 条评论