[Js] 關於全域變數
scope 可以翻譯成作用域,意即 variable能被調用的範圍。
→ 也就是說,如果一個variable不在當下執行的scope裡,對當前的scope來說根本看不到variable這個東西,所以沒辦法調用。
(補充: 在JS裡,所有的object和function也都是variable。)
而 scope 又分為
- Global scope
- function scope
- Block scope (ES6後新增)
1. Global Scope
只要一個variable宣告在所有的function之外,我們將variable稱為 global variable(全域變數)。
被宣告為global variable就會擁有Global Scope。
2. Function Scope
在JS裡,每一個function都會有一個Function Scope。
而 被定義在function內部的variable,便不能在function外被調用。
3. Block Scope
因為ES6新增了 let
和 const
,
這兩個 keyword 能建立 Block Scope。
let
或const
的宣告,只在{大括號}中有效,無法從{}外被調用。
(→ let
, var
, const
都有global scope和function scope,但只有let
和const
有block scope)
{block scope}通常指兩種情況:
- 在if statement裡面
- 在for Loop裡面
若是不用let const 等方式宣告變數容易出BUG ~
例如:
function test(a){
number = 8
return number + a
}
console.log(test(10))
這樣還是可以運作 但是程式碼一龐大起來就很容易出問題,所以還是要乖乖用const,let喔~
同時在Global跟Function內設置變數的話 函式內的優先於全域變數
留言
張貼留言