let
一、
1、
let 所宣告的變數,除了在 Global scope 與 function scope 互不干擾之外,
在 Block scope、Loop scope 也是互不干擾。
let x = 1; console.log(x); function foo() { let x = 3; console.log(x); } foo(); { let x = 5; console.log(x); }
2、
特別是 Loop scope,使用 let 寫法之後,再也不用擔心相同變數間會相互干擾了,
之前 var 的寫法怕相同變數間會相互干擾,所以要使用時都要 reset 一次才敢用。
以下例子隨便亂舉,僅供參考。
for (let i = 1; i <= 5; i++) { let s = ""; for (let j = 1; j <= i; j++) { s = s + "*"; } console.log(s); } console.log(""); for (let i = 5; i >= 1; i--) { let s = ""; for (let j = 1; j <= i; j++) { s = s + "*"; } console.log(s); }
二、
1、不同於 var,let 不能去重新宣告變數。
let x = 1; let x = 100; // Not allowed console.log(x); function foo() { let x = 3; let x = 300; // Not allowed console.log(x); } foo(); { let x = 5; let x = 500; // Not allowed console.log(x); }
2、對於 var 所宣告的變數,let 也不能去重新宣告變數。
var x = 1; let x = 100; // Not allowed console.log(x); function foo() { var x = 3; let x = 300; // Not allowed console.log(x); } foo(); { var x = 5; let x = 500; // Not allowed console.log(x); }
3、對於 let 已經宣告的變數,var 也不能去重新宣告變數。
let x = 1; var x = 100; // Not allowed console.log(x); function foo() { let x = 3; var x = 300; // Not allowed console.log(x); } foo(); { let x = 5; var x = 500; // Not allowed console.log(x); }
三、
用 var 宣告的 global variable 在 HTML 觀點,可以用 windows.object 去取
var carName = "Volvo"; console.log(window.carName);
但用 let 宣告的 global variable,則不能用 windows.object 去取
let carName = "Volvo"; console.log(window.carName); // can't to get value
四、
對於 var 可以先使用再宣告,但 let 不行(請參考JavaScript Hoisting)。
x = 100; console.log(x); var x; // will have error y = 300; console.log(y); let y;