function b() {
var a = 1;
function c() { alert(a); }
return c;
}
alert(b()());
彈窗 1:1 (內部 alert(a))
彈窗 2:undefined (外部 alert(...) 接收返回值)
b() 執行,創建閉包:內部函數 c 捕獲外部變量 a,返回函數 c 的引用。() → 執行 c(),彈出 1。c 無 return 語句,隱式返回 undefined。alert() 接收步驟 2 的返回值 undefined,彈出 undefined。函數 c 與其詞法環境(變量 a)的組合,使得 c 離開創建作用域後仍能訪問 a。
function b() {
var a = 1;
function c() { alert(a); return 'done'; } // 顯式返回
return c;
}
alert(b()()); // 彈 1,然後彈 'done'
或分步調用:
var fn = b(); fn(); // 僅彈 1