1. 程式人生 > >ES6筆記-let和var的區別

ES6筆記-let和var的區別

let基本用法

ES6新增了let命令,用來宣告變數,用法類似於var,但它所宣告的變數,只在let命令所在的程式碼塊內有效。

{
    let a = 10;
    var b = 20;
}
console.log(a) // Error
console.log(b) // 20

對於for迴圈的計數器,就很適合使用let命令。

for (let i = 0; i < 10; i++) {
    // ...
}
console.log(i); // Error

上面程式碼中的計數器i只在for迴圈體內有效,如果在迴圈體外引用就會報錯。

let不存在“變數提升”

按照通常邏輯,變數只有在宣告之後才能使用。但var命令會發生“變數提升”現象,即變數可以在宣告之前使用,值為undefined,這很容易產生錯誤。例如:

// var
console.log(a) // 輸出undefined
var a = 100;
// let
console.log(b); // Error
let b = 200; 

ES6規定暫時性死區和let、const語句不出現變數提升,主要是為了防止在變數宣告前就使用這個變數,導致意料之外的行為。這種錯誤在ES5是很常見的,現在有了這種規定,避免此類錯誤就很容易了。

let的這種設計就是為了讓大家養成良好的程式設計習慣,變數一定要在宣告之後使用,否則會報錯。

let不允許重複宣告變數

let不允許在相同作用域內,重複宣告同一個變數

// 錯誤
function func() {
    let a = 10;
    let a = 20;
}