懶人包支援:在 JavaScript 裡,有 3 種等級的作用域: 1. 香港喜劇天王星爺——Function Level Scope 2. 國際巨星阿湯哥——Global Level Scope 3. 住在隔壁號稱歌神的里長阿伯——Block Level Scope (ES6)
let
和 const
產生的變數是 Block Scope,使用 var
產生的變數是 Global Scope 這一段,相對不易理解。if-else
或 for loop
,形成一個個 Block (如 Block A
、Block B
)。myFunc1()
、myFunc2()
),而函數內又可能再形成小 Block。var
、let
、const
都一樣)n1
宣告的地方,淺藍色部分就是 n1
的 Scope。var
)n1
使用 var
宣告在主程式區,會存放在 Global Object 裡,屬於 Global 變數。let
或 const
)Main()
)。n1
不會成為 Global Scope,而是 Function Scope / Block Scope。n1 = "OneJar"
,也就是沒有宣告就對 n1
賦值的地方。n1
產生為 Global 變數,所以變成 Global Scope。var
、let
、const
都一樣)var n1 = "Tom Cruise"
,宣告在主程式區,屬於 Global Scope。var n1 = "Stephen Chow"
,宣告在主程式區,屬於 Function Scope。n1
。n1
。var
宣告var
不支援 Block Scope。Block C
內),會是 Function Scope。let
或 const
宣告let
或 const
宣告變數,支援 Block Scope 效果。x
只會在被宣告的那個 Block 和其子 Block 被認得。public
或 private
等修飾子來宣告作用域,和 JavaScript 的作用域又是不同的運作原理。