1. 程式人生 > 其它 >ES6 換了名字的變數

ES6 換了名字的變數

技術標籤:ES6變數es6

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 後面只有一條語句是也要寫 { }

ES6 語法轉換 ES5工具

ES6 語法轉換 ES5