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;