Scope變數領域
全域變數
區域變數
閉包
詳細請參考:閉包 - JavaScript | MDN
閉包(Closure)是函式以及該函式被宣告時所在的作用域環境(lexical environment)的組合。
Example
function init() {
var name = "Mozilla"; // name 是個由 init 建立的局部變數
function displayName() { // displayName() 是內部函式,一個閉包
alert(name); // 使用了父函式宣告的變數
}
displayName();
}
init();
init()
建立了局部變數 name
與 displayName()
函式。displayName()
是個在 init()
內定義的內部函式,且只在該函式內做動。displayName()
自己並沒有局部變數,不過它可以訪問外面函式的變數、因而能取用在父函式宣告的變數 name
。
這裡有個更有趣的例子:makeAdder
函式:
function makeAdder(x) {
return function(y) {
return x + y;
};
}
var add5 = makeAdder(5);
var add10 = makeAdder(10);
console.log(add5(2)); // 7
console.log(add10(2)); // 12
在此,我們定義一個帶有單一參數 x
並回傳新函式的函式 makeAdder(x)
。該新函式又帶有 y
參數並回傳了 x
與 y
的總和。