前言
上一篇提到了在 ES6 之前變數的生存範圍,接著要提到的是於 ES6 時新增加的兩個變數宣告方式:let 與 const 。
let 與 const 的生存範圍
關於變數的作用域 (scope):
- ES6 之前作用域的劃分都是以 函式 (function) 來界定
- ES6 開始則增加了以區塊 (block) 來劃分的方式,其中區塊的表示方式使用大括號 { } 來表示。
而
let
與const
的作用域就是屬於以 block 來劃分的方式。
作用域以函式 (function) 為劃分的例子
1 | function test(){ |
這個例子因為所有的程式都被包覆在 test
函式內,所以 console.log
可以取用變數 b
。
作用域以區塊 (block) 為劃分的例子
使用同一個例子當作對照組
1 | function test(){ |
原因是因為「使用 let
、 const
宣告的變數作用域只存活在 { } 中」。
也就是說這個例子中的變數 b
只存活於 if
的 {} 內 。
函式本身也是一個區塊 (block)
1 | function test(){ |
意思就是如果像這樣把變數用 let
宣告在函式內的話,其實跟使用 var
來宣告變數是一樣的。
原來可以這樣用的例子
1 | function test(){ |
看影片才知道原來可以直接使用 {} 建立一個區塊 (block),然後這邊得到的結果也與上面提到的觀念一致, {} 外嘗試取用變數 a
是沒辦法的。