Javascript自學筆記 (8)

Scope變數領域

全域變數

區域變數

閉包

詳細請參考:閉包 - JavaScript | MDN
閉包(Closure)是函式以及該函式被宣告時所在的作用域環境(lexical environment)的組合。

Example

function init() {
  var name = "Mozilla"; // name 是個由 init 建立的局部變數
  function displayName() { // displayName() 是內部函式,一個閉包
    alert(name); // 使用了父函式宣告的變數
  }
  displayName();
}
init();

init() 建立了局部變數 namedisplayName() 函式。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 參數並回傳了 xy 的總和。