JavaScript var let const 差異

var

作用域:在 function 內宣告的只有在 function 內有用,在函式外宣告作用範圍為全域 global。

function count() {
  var num = 400;
  console.log(num); // 執行count() 會出現 400
};
count();
//console.log(num); // 報錯:num 未定義

var 的缺點,在一些區塊語句 (if、else、for、while) 使用 var 宣告的變數可能會污染全域變數。

for (var i = 0; i < 3; i++) {
  console.log(i, "Hi"); // 依次出現 0 "Hi"、1 "Hi"、2 "Hi"
}
console.log(i);// 沒宣告全域 i 但會出現 3

在 ES6 的版本中推出了新的變數宣告關鍵字 let 和 const,不會有 var 的副作用。

let

作用域是區塊作用域 { } 包住的區域,離開 { } 就無法存取。

禁止同一層 Block 重複宣告變數

for (let x = 0; x < 3; x++) {
  let y = 2;
  //let y = 3; // 報錯:y 已宣告
  //var y = 3; // 報錯:y 已宣告
  console.log(x); // 0 1 2
}
console.log(x); // 報錯:x 未定義

const

const 可以視為 let 的常數加強版,let 有的特性 const 都有,但 const 額外多了常數保護的特性。

在宣告 const 時就必定要指定給值,不然會產生錯誤。而且指定後不能更改賦值。

const money = 100;
//money = 60; // 報錯:Assignment to constant variable

var:不會受限在代碼塊區域(block scope)內,可能會汙染全域變數。不管哪個作用域(Scope)都可以存取,可以重複宣告。

let:所宣告的變項只有在代碼塊區域(block scope)內有效,不會產生全域變數,無法在同一層 Block 重複宣告變數。

const:具備 let 所有的特性。在一宣告時就必定要指定給值,不然會產生錯誤,宣告後不能更改值。

發佈留言