クロージャ
変数を取り込む
処理に状態を持たせられる
ラムダ式で書かれることが多い
例
code: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.icon
少しスマートな書き方
code: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
実践だと↑の例もだが、なにかをカウントするのと相性がよい