就是指變數可以被訪問和使用的範圍,來說一下var、let和const的作用域差異。
var :
function example() {
console.log(x); // 輸出: undefined 因為變量提升造成的
var x = 5;
}
- 函數作用域或全域作用域
- 可以重複宣告
- 存在變數提升(hoisting)
- 變量提升只提升聲明,不提升初始化
let :
if (true) {
let y = 10;
}
console.log(y); // 錯誤: y is not defined,因為已經不在{}裡面
- 塊級作用域
- 不可重複宣告
- 不存在變數提升
const :
const z = 15;
z = 20; // 錯誤: 不可以重新賦值
- 塊級作用域
- 不可重複宣告
- 不可重新賦值 (但對於物件和陣列,其內容可以修改)
- 不存在變數提升
主要區別 :
作用域 :
- var: 函數作用域
- let 和 const: 塊級作用域
重複宣告 :
- var: 允許
- let 和 const: 禁止
變數提升 :
- var: 會被提升
- let 和 const: 不會被提升(存在暫時性死區)
重新賦值 :
- var 和 let: 允許
- const: 禁止(對於基本類型)
參考資料 :
在 JavaScript 中用 var, let, 以及 const 有什麼差別?什麼時候該用哪個? |ExplainThis