ES6 換了名字的變數
阿新 • • 發佈:2020-12-20
ES6 換了名字的變數
變數宣告 let
不屬於頂層物件window
var a = 5;
let b = 6;
console.log(window.a);
console.log(window.b);
很簡單,由var宣告的a是winow的屬性,而由let宣告的b並不是window的屬性,所以let不屬於全域性物件window。
var宣告的變數全部掛載到window上,那window這個變數就會變得越來越大,同樣就會引起全域性變數汙染,ES6中let 就很好的解決了這個問題。
不允許重複宣告
let a = 5;
let a = 6
console.log(a);
在 let宣告的變數中這樣是不允許的,但是如果是由 var宣告的變數 就會直接覆蓋掉上一個變數的值。
不存在變數提升
console.log(a);
let a = 5
直接會報錯 ,但是由var宣告時 只會彈出undefined未定義
console.log(a);
var a = 5
//同等於
var a ;
console.log(a);
a = 5;
所以let是不存在變數提升的。
暫時性死區
// 例1
var a = 6666;
if (true ) {
a = 5555;
let a
console.log(a);
}
// 例2
function fun(b =a, a = 222) {
console.log(a, b);
}
fun();
這兩個例子都是錯誤的,都存在暫時性死區。
顧名思義 ,暫時性死區就是在作用域內未宣告之前就使用這個變數,同理在作用域內let必須先宣告再定義,不可以先定義再宣告,其本質就是防止在變數宣告之前就使用這個變數,使程式碼更加的安全 。
塊級作用域
if (false) {
var a = 555;
}
console.log (a);
由var宣告的變數作用域在全域性,可查詢到這個a,但是獲取不到值,輸出的只能nudefined,但是將var換成let宣告時,就會因為塊級作用域的影響下直接報錯,它讓我們的程式碼更加的安全 。
每個 { } 都是一個塊級作用域。
在ES6中 if 後面只有一條語句是也要寫 { }。