iT邦幫忙

2023 iThome 鐵人賽

DAY 3
0
自我挑戰組

複習 JavaScript 核心概念系列 第 3

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

  • 分享至 

  • xImage
  •  

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

var

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


let 和 const

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

也就是說 var 是最早引入 JavaScript 的變數宣告方式,但在後來 letconst 被引入後,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 的特性與區別。目前來說在新專案開發時,推薦使用 letconst,並盡量避免使用 var,避免不必要的麻煩。而接下來應該會針對作用域變數提升(hosting)來做較詳細的介紹。那我們明天見。


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

尚未有邦友留言

立即登入留言