iT邦幫忙

2023 iThome 鐵人賽

DAY 3
0
自我挑戰組

複習 JavaScript 核心概念系列 第 3 篇

[Day 03] 宣告關鍵字: var, let, const

  • 分享至 

  • xImage
  •  

var、let 和 const 是 JavaScript 中用來宣告變數(常數)的關鍵字。在講解它們的特性之前,還是先來看一下它們的歷史:

var

var 是最早引入到 JavaScript 中的變數宣告關鍵字,它出現在 ECMAScript 1 (ES1) 中,於 1997 年發布。當時,JavaScript 主要用於網頁上的簡單互動,因此對於變數作用域的需求並不是很複雜。
然而由於 var 存在作用域和變數提升等「較不直覺」的問題,容易導致不符合預期的行為,因此在後來的 ES 版本中,引入了 let 和 const 來解決這些問題。


let 和 const

let 和 const 在 ECMAScript 6 (ES6) 中首次引入,於 2015 年發布。ES6 是 JavaScript 歷史上的一個重大更新,帶來了許多新的語言功能和改進。
let 和 const 的崛起主要是因為區塊作用域的特性,這改善了變數作用域的可控性,並幫助開發人員避免意外的變數提升問題。

也就是說 var 是最早引入 JavaScript 的變數宣告方式,但在後來 let 和 const 被引入後,var 已逐漸被取代,可謂是時代的眼淚。
但接下來我還是會介紹三者的特性,來看看它們有哪些特性和區別。
(關於作用域和變數提升(hosting)我會留到明天以後再詳談)

var, let, const 的特性與區別

var let const
引入時間 ES1 ES6 ES6
作用域 函式作用域(Function scope) 區塊作用域(Block scope) 區塊作用域(Block scope)
變數提升 是 否 否
宣告需給初始值 否 否 是
可重新宣告 是 否 否
可重新賦值 是 是 否

var

  • var 是 JavaScript 最早引入的宣告變數的關鍵字。
  • 是函式作用域,也就是說變數的範圍為它所在的函式而非區塊。
  • var 宣告的變數可以被重複宣告,但這可能導致變數的覆蓋或錯誤。
  • 在變數的宣告被提升到其所在函數的頂部,但初始化(賦值)保留在原來的位置。
  • 範例:
function example() {
  var x = 10;
  if (true) {
    var x = 20; // 這將改變外部的 x 值
  }
  console.log(x); // 輸出 20
}

let

  • let 是 ES6 引入的新關鍵字,用於宣告變數。
  • let 是區塊作用域,這意味著變數的範圍僅限於宣告時所在的區塊(例如:if語句、迴圈或函數)。
  • let 宣告的變數不能被重複宣告,這有助於避免變數覆蓋的問題。
  • let 宣告的變數不會被提升,它們只有在宣告的位置之後才能被訪問。
  • 範例:
function example1() {
  let x = 10;
  if (true) {
    let x = 20; // 這不會影響外部的 x 值
  }
  console.log(x); // 輸出 10
}

function example2() {
  let x = 10;
  if (true) {
    x = 20; // 這會影響外部的 x 值
  }
  console.log(x); // 輸出 20
}

const

  • const 是 ES6 引入的新關鍵字,用於宣告常數。
  • 跟 let 一樣,const 是區塊作用域。
  • 跟 let 一樣,const 宣告的變數不能被重複宣告。
  • 跟 let 一樣,const 宣告的變數不會被提升。
  • 範例:
function example1() {
  const x = 10;
  if (true) {
    const x = 20; // 這不會影響外部的 x 值
  }
  console.log(x); // 輸出 10
}

function example2() {
  const x = 10;
  if (true) {
    x = 20; // 報錯
  }
  console.log(x); // 不會執行到該行
}

結語

今天簡單介紹了 var, let, const 的特性與區別。目前來說在新專案開發時,推薦使用 let 和 const,並盡量避免使用 var,避免不必要的麻煩。而接下來應該會針對作用域和變數提升(hosting)來做較詳細的介紹。那我們明天見。


上一篇
[Day 02] JavaScript 從解析到執行的過程
下一篇
[Day 04] 作用域(Scope)
系列文
複習 JavaScript 核心概念 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言