JS筆記 | 宣告變數的關鍵字:let、const、var

HTML、CSS、JAVASCRIPT 總算是學到一個段落,現在終於可以開始學前端框架 React 了,就順便把先前放在 notion 的 JS 草稿筆記重新梳理,也可把過往匆匆學習沒有完全理解的部分透過寫文章的方式,再完整的理解一次!

let, const, 變數

宣告變數的二個主要關鍵字是:let、const

其實還有一個 var,但現在已經不常用也不建議用了,下面再解釋


let:

用來宣告會「經常變動數值」的變數,就是可以修改變數成其他數值,並且它只能在自己的作用域有效用,也不可以重複宣告,以下用範例來解釋各特性:

1. 可以修改變數的值 ( 即重新賦值 )

一開始宣告 a = 2,後來 a 變成了 a + 1,所以最後變數 a 就不是一剛開始定義的 2,而是修改後的 3

let a = 2;

a = a + 1;

console.log(a); // a = 3

2. 有函數作用域和區塊作用域的限制

變數 a 在 function 函數作用域內,所以變數 a 只在這個作用域內有效用,在外面就無效了,除非將變數 a 宣告在外面,變成全域變數,這樣就不論是哪個作用域可以用

PS: 作用域就是 { } 框起來內的,若是用函數包起來的稱為函數作用域;若是 if、for 包起來的稱為區塊作用域

function hi() {
  let a = 1;
  console.log(a); // a = 1
}

console.log(a); // 顯示錯誤,宣告的變數只在自己的作用域有效 ( 函數作用域 )

變數 a 只會在離自己最近的作用域有效用,以這個例子來說,變數 a 在離自己最近的 if 區塊作用域內去做宣告,所以在 if 區塊作用域外就會無效用

function hi() {
  if (true) {
    let a = 1;
    console.log(a); // a = 1
  }
  console.log(a); // 顯示錯誤,宣告的變數只在自己的作用域有效( 區塊作用域 )
}

3. 同一個作用域不可以重複宣告

不同的作用域可以重複宣告變數,但同一個作用域不可重複宣告變數,此處的 a 在同一個全域裡,所以不可以重複宣告

let a = 2;
let a = 5;

console.log(a); // 顯示錯誤,同個作用域不可重複宣告

const:

用來宣告會「必定不能變動」的變數 ( 可以稱為常數 ),就是該變數只能是一剛開始定義的值,不可以再修改,並且它只能跟 let 一樣只能在自己的作用域有效用。習慣上也會用全大寫字母來定義變數名稱 ( 非必要作法,只是比較好辨識 ),以下用範例來解釋各特性:

1. 不可以修改變數的值

數學數 PI = 3.14 就很適合用 const 來宣告,因為是固定的,不會再隨意變動的值

const PI = 3.14;
PI = 5;

console.log(PI); // 顯示錯誤,不可以變更值

2. 有函數作用域和區塊作用域的限制

變數 PI 在 function 這個函數作用域內,所以變數 PI 只能在自己的作用域內有效用,在外面就無效了,區塊作用域同理 ( 跟 let 一樣 )

function square(){
  const PI = 3.14;
  console.log(PI); // PI = 3.14
}

console.log(PI); // 顯示錯誤,宣告的變數只在自己的作用域有效 ( 函數作用域 )

3. 同一個作用域不可以重複宣告

不同的作用域可以重複宣告變數,但同一個作用域不可重複宣告變數 ( 跟 let 一樣 )

const A = 2;
const A = 5;

console.log(A); // 顯示錯誤,同個作用域不可重複宣告

var:

最後一個就是 var,這個大概知道就好,在 ES6 以前只有 var 一個關鍵字,而且也無法區分該變數是否為常數,後來 ES6 以後有 let 和 const 來取代 var,因為 var 它有幾點特點會導致臭蟲:

1. 變數僅有函數作用域限制,卻沒有區塊作用域的限制

只要變數 a 在函數作用域內,不論是哪個區塊作用域都可以用,這樣會無法限制區塊內變數的範圍,這樣變數會混雜而導致意想不到的意外

function fn(){
  if (true) {
    var a = 1;
  }
  console.log(a); // a = 1
}

2. 變數自動往上升

變數 a 會被往上提升至最上面,但初始化的值卻還在原本的地方,也不會告知錯誤,變數 a 僅會變成 undefined,很有可能導致臭蟲

→ 也可以理解成先宣告一個沒有值的變數 a,等執行 console.log 後才執行賦予值

console.log(a); // a = undefined

var a = 10;

3. 同一個作用域可以重複宣告

在同一個作用域可以重複宣告變數,這樣會覆蓋之前的變數值,容易有錯誤

var a = 2;
var a = 5;

console.log(a); // a = 5

總結:

宣告變數時,若是該變數有可能會再變動或賦予新值,就用 let;若是該變數確定不會再變動,就用 const,而 var… 忘了它吧,早點與它分手,寫 code 會更快樂XDD

最後,剛好在寫這篇文章時,有看到這部影片的解說,蠻好理解的!

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *