ES6 let和const詳解及使用細節

zc的救贖發表於2017-04-27

ES6之前javascript只有全域性作用域和函式作用域,所以經常會遇到變數提升了或者使用閉包的時候出錯的問題。


所有a[i]都會輸出10

var arr=[];
for (var i=0;i<10;i++){
     arr[i]=function(){
         console.log(i); 
     };
} 


變數提升,輸出undefined

function showName(){
	console.log(name);
	var name = "Jhon";
}

ES6引入了let和const關鍵字,從而使javascript像其他語言一樣擁有了塊級作用域。沒有其他語言程式設計經驗的或者由於長期使用ES5編碼的習慣問題,有一些細節的地方仍然需要注意一下。

首先說一下let:

let讓變數具有了塊級作用域,像這樣就不會共享變數i,而是輸出0-9的數字。


let arr=[];
for (let i=0;i<10;i++){
     arr[i]=function(){
         console.log(i); 
     };
} 


使用let需要注意:
  • 使用let申明的變數具有塊級作用域,即變數宣告前後的{}。
  • let宣告的全域性變數不是全域性物件的屬性,不可通過window.變數名訪問,理論上存在於一個頂級的js程式碼塊中。
  • 形如for ( let  i=0....)的迴圈再每次迭代時都為i建立新的繫結。所以迴圈中如果有一個閉包,那麼閉包將捕獲一個迴圈值的不同副本,不會共享一個變數。
  • let宣告的變數直到控制流到達該變數定義的位置時才被裝載,所以到達之前使用會觸發錯誤,即不能先使用後宣告。
  • 用let重複宣告一個變數會發生語法錯誤。

const常量:

const和和let類似,只是const宣告的變數只可以在宣告時賦值,不可隨意修改,不然會報錯

const MAX_SIZE = 300; //正確
MAX_SIZE = 200; //錯誤

其他注意事項和let一樣


相關文章