function w() {
var c = 8;
function b() { console.log(c); c++; }
return b;
}
w()(); // 8
w()(); // 8
w()(); // 8
var d = w();
d(); // 8
d(); // 9
d(); // 10
w() 都創建新的作用域,c 重新初始化為 8,返回的 b 立即執行並銷毀作用域(若無其他引用)。故每次輸出 8。w() 執行一次,創建一個作用域,c=8,返回內部函數 b 賦給 d。此時作用域被 d 引用,不會銷毀。後續每次 d() 都操作同一個 c,故遞增輸出 8,9,10。函數 + 其定義時的詞法環境。d 保存了對 w 內部變量 c 的引用。