ES6之一(let和const)
阿新 • • 發佈:2019-01-02
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 的塊級作用域允許宣告函式的規則,只在使用大括號的情況下成立,如果沒有使用大括
號,就會報錯。