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声明就可以了。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM