[JS] var、let、const 你們啥關係?

Huge Gun
3 min readMar 6, 2018

--

在 ECMAScript6(ES6,ES2015)規範出現之前,宣告變數只有 var 這個方法,在之後 ES6 中新增了 let、const兩個方法,前後兩者的差別在於宣告的變數、常數的範圍(scope),又叫作用域。

JavaScript 中範圍的有2種:全域作用域(global)和區域作用域(local)。

區分範圍是採用 “函式範圍(function scope)”的方式,也就是說只有 function 才會產生一個區域作用域,在 function 外宣告的變數、常數都屬於全域作用域,其他關鍵字 if、for、switch 產生的區塊雖然也有{},但無法產生區域作用域,因為在 ES6 規範前 JS 並不存在 區塊範圍 (block scope)。

var、let、const三者在作用域 (scope)的差異:

var:只能用來宣告變數,使用“函式範圍(function scope)”,函數的宣告都會被定為全域變數。

let:宣告變數,使用“區塊範圍(block scope)”,let 會把宣告的變數直接附著在他所在的區塊中,常見的是一對{}。

const:宣告常數,使用“區塊範圍(block scope)”,const宣告的值固定不變,之後任何想改變其值會造成錯誤。

來看以下的幾個簡單的例子:

var宣告變數:

var 沒有區塊範圍(block scope)

問題:
1.全域作用域 (global) 中同名的 number的值被改變,不小心就可能踩雷。

2. i 與 number 在 for 區塊之外還是可以被取得。

let 可以解決以上的問題:

let 區塊範圍(block scope)

const 宣告變數:

const 區塊範圍(block scope)
  1. 宣告後的值無法更動。
  2. 區塊範圍所以無法在{}之外取得。

以上淺談了一下var,let,const 三者的差別,也有人把 let 稱作是更好用的 var 就看個人怎麼理解囉,這篇裡面中還有一些小差異沒提到 像是: Hoisting (拉升)、Closure (閉包) 的部分之後會再另外寫囉!

--

--

Huge Gun
Huge Gun

Written by Huge Gun

槍再大把,沒子彈是不行的;通過學習,鍛造自己的子彈!https://github.com/HsienW

Responses (1)