generated at
クロージャ
変数を取り込む
処理に状態を持たせられる
ラムダ式で書かれることが多い

test.js
var add; var show; var set = function(){ var num = 0; add = function(){ num += 1; } show = function(){ console.log(num); } } set(); add(); show();// 1 add(); add(); show();// 3

setの関数の外では当然numをアクセスできない(スコープの範囲外)
addの中身を定義するときにnumを含んでいる。addを実行するとnumは保持し続けている


hr
少しスマートな書き方
test.js
var counter = function () { var count = 0; return function inner() { count += 1; print(count); }; }; var c1 = counter(); var c2 = counter(); c1(); //1 c1(); //2 c1(); //3 c2();//1 c2();//2


実践だと↑の例もだが、なにかをカウントするのと相性がよい