JavaScript 變數作用域 Variable Scope
變數的作用域(Scope)
作用域是指變數的有效範圍。
常聽到的全域變數(global variable)通常是指:全域變數是不在任何function(){}
內的變數,換句話說,全域變數是在任何地方都可以用的變數。
跟全域變數相反,function(){}
內的變數稱為區域變數(local variable)。
詞法作用域(Lexical Scope)
變數的作用域在程式碼寫完的當下就確定了。
用範例的執行過程來說,執行 fnA()
時,會先查找 function 內是否有 a
這個變數,沒有的話就向 function fnA(){}
外查找(不是從執行 fnA()
的地方向外查找),所以function fnA(){}
向外找到的a
印出來為 0。
所以,即使沒有呼叫fnA()
,function fnA(){}
裡面的a
在寫完的當下就已經確定是 0 了。
1 | var a = 0; |
函式作用域(Function Scope)
var 變數的作用域在 function(){}
內。
在function(){}
內可以向function(){}
外查找其它變數(詞法作用域)。但從function(){}
外要找function(){}
內的變數,則會因為變數的作用域只在function(){}
內有效,所以會取不到。
1 | var b = 0; |
區塊作用域(Block Scope)
let/const 變數的作用域在 {}
內。
{}
、function(){}
、if{}
、for(){}
這種大括號{}
的地方,都算是區塊作用域。
var 與 let/const 的差別在於,{}
外可以取到 var 的值,{}
外不能取到 let/const 的值。
範例的{}
可以執行,但只有區塊作用域的用途,無任何功能。
1 | { |
參考資料
JavaScript: Introduction to Scope (function scope, block scope)