眾所周知ES5之前javascript語言只有函數作用域和全域作用域,使用var來宣告變量,var聲明的變數還存在變數提升使人困惑不已。我們先來複習ES5的var聲明,再對比學習let和const 。
var
var宣告之函數作用域與全域作用域。
來段程式碼體會一下:
function getName() { if (1 + 1 === 2) { var name = 'xixi'; } console.log(name); } getName();//xixi
在c或java語言中name本應該只在if區塊中使用的,但是在if的外面也可以存取到,這個就是js沒有區塊級作用域的一種體現。這個弊端在for迴圈中體現的十分明顯:
for (var i = 0; i < 10; i ++) { // ... } console.log(i);// 10
var i的本意是宣告個臨時變數i,用來遍歷數組等,本不應該在for迴圈的外部存取到,但現在卻可以被訪問到你說鬧不鬧心?好一點的程式設計師會用立即執行函數來模擬區塊級作用域,原來的我會注意一下盡量不使用相同的變數名
以上是ES6塊級作用域詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!