1. 程式人生 > 實用技巧 >ES6基礎—let與var/const/物件字面量的增強寫法

ES6基礎—let與var/const/物件字面量的增強寫法

為了彌補JavaScript中var的缺陷,所以在ES6中有了let

let與var的區別

1.let定義的變數存在塊級作用域,一個大括號即是一個塊級作用域。

{
  //一個塊級作用域
}
 1 {
 2   let test1='baby';   
 3   console.log(test1);   //baby
 4 }
 5   console.log(test1);   //undefined
 6 {
 7   var test1='baby';
 8   console.log(test1);   //baby
 9 }
10 console.log(test1);     //baby

而var只存在函式作用域,即外部不能訪問在函式內宣告的變數。

值得注意的是,在if和for中宣告的變數在其他地方依然可以使用。所以產生了迴圈多個事件時只會觸發最後一個的問題,其中的一個解決方法—閉包就是利用函式作用域將 i 先存了下來。(ES6中可以使用let取代var來聲明i即可解決問題。for(let i ; i < length ; i ++))

2.let不存在預處理機制,var存在。就是說let必須先定義再使用

js引擎解析程式碼時存在預處理機制,會將var宣告的變數提前,但不會賦值

1 console.log(test2);   //undefined
2 var test2='kids';
3 console.log(test2);   //
test
4 console.log(test3); //直接報錯,下面不會繼續執行 Uncaught ReferenceError: Cannot access 'test3' before initialization 5 let test3='kids'; 6 console.log(test3);

3.被let定義後的變數不能重新被定義,但是var可以

1 var test4='hahaha';
2 var test4='xixixi';
3 console.log(test4);  //xixixi
4 
5 let test5='hahaha';
6 let test5='xixixi;
7 console.log(test5); //報錯——Uncaught SyntaxError: Identifier 'test5' has already been declared

const

在ES6之前並沒有可以宣告常量的

先寫這麼多,有空我再更......