JS let const 筆記

let

  1. let 無法再次宣告

同一函數或塊範圍內重新聲明同一變量會引發SyntaxError

let num = 1;

let num = 2; // SyntaxError

但使用var是可以重新宣告的

let num = 1;

var num = 2;
  1. 限制作用域

let不會在全域物件中建立,var則是在全域中建立(window)

var x = "global";
let y = "global";
console.log(this.x); // "global"
console.log(this.y); // undefined

利用迴圈查看

可以看到如果使用 let 宣告,並不會複寫,因為每一個迴圈等同於一個執行環境,程式碼執行之後 JavaScript 會將變數指向到該記憶體位置,因此就不會釋放掉,等到呼叫時就可以找到相關記憶體位置

for (let i = 0; i <= 10; i++) {
setTimeout(function () {
console.log(i); // 輸出一到十
});
}
console.log(i); // ReferenceError

使用 var 就會汙染到環境

for (var i = 0; i <= 10; i++) {
setTimeout(function () {
console.log(i); // 10跑十次
});
}
console.log(i); // 10
  1. 暫時性死區

let 在創造階段與執行階段之間有一個暫時性死區

console.log(num); // ReferenceError

let num = 1;

與 var 差異

console.log(num); // undefined

var num = 1;

const

想要宣告常數,可以使用 const 宣告,常數不能重複指定值,也不能重複宣告const也常拿來宣告物件,因為他是傳參考特性,只修改屬性質是可以的

  1. 宣告常數

不能重複指定值

const DISCOUNT = 10;

DISCOUNT = 15; // TypeError: Assignment to constant variable.
  1. 宣告物件

使用const宣告的物件被凍結後就無法被修改,如果是使用var物件屬性不能修改但是物件本身是會被修改的

以下使用var宣告

var human = {
name: "joe",
moner: 50,
};

human.name = "abc";
Object.freeze(human);
human.moner = 100;

human = {}; // human被修改

使用const

const human = {
name: "joe",
moner: 50,
};

human.name = "abc";
Object.freeze(human);
human.moner = 100;

human = {}; // TypeError: Assignment to constant variable.

練習 ES6

Airbnb JavaScript 風格指南

編輯器可以安裝ESLINT