ES6基礎—let與var/const/物件字面量的增強寫法
阿新 • • 發佈:2020-09-07
為了彌補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之前並沒有可以宣告常量的
先寫這麼多,有空我再更......