1. 程式人生 > >ES6之一(let和const)

ES6之一(let和const)

ES6理解

ES6規定了變數的問題,主要體現在變數或者函式的作用域問題上。

1.ES6取消了頂級變數,所以let , const , class宣告的全域性變數不存在頂級物件的屬性,即

var a = 1;
// 如果在Node的REPL環境,可以寫成global.a
// 或者採用通用方法,寫成this.a
window.a // 1
let b = 1;
window.b // undefined

2.塊級作用域使得 { }中的變數或者物件不可以被外界所使用的,會報錯,同時不存在變數提升,所以在未進行定義的情況下,不可以使用該變數,這就是所謂的暫時性死區

2.1. 為什麼要是用塊級作用域
在很多語言中,例如:C等都存在塊級作用域,而 ES6 之前是沒有的,

//C語言 
#include <stdio.h> 
void main() 
{ 
int i=2; 
i--; 
if(i) 
{ 
int j=3; 
} 
printf("%d/n",j); //use an undefined variable:j
}

//javascript語言
functin test(){ 
for(var i=0;i<3;i++){ 
} 
alert(i); 
} 
test();//3
i是for迴圈中定義的變數,在一次次迴圈結束後,i為3,並且一直存在於程式記憶體中,造成記憶體洩露

塊級作用域可以防止變數汙染,並且防止上面造成的記憶體洩露

3.let定義的變數不可以在同一作用域下重複定義即:

(function () {
    let a = 0;
    let a = 4;
    alert(a);
})()
//Identifier 'a' has already been declared

const定義的變數後必須進行初始化設定,即進行賦值
const s;
s=3
//Missing initializer in const declaration

4.ES6 的塊級作用域允許宣告函式的規則,只在使用大括號的情況下成立,如果沒有使用大括
號,就會報錯。