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