クロージャ(その2)
クロージャについて、別なサンプルを書いて動作させてみます。
前回のクロージャは、関数内にローカル変数を宣言し、そのローカル変数をクロージャを動作させるタイミングでアクセスしていました。
次に、ローカル変数を宣言せず、関数の引数として指定するサンプルを動かしてみます。
function test3(n)
{
return {
//ゲッター
get f1() {
return n++;
},
//セッター
set f1(m) {
n = m;
}
};
}
//関数test3を変数へ代入し、オブジェクトを生成する
var obj3 = test3(50); //このタイミングでゲッターメソッドを実行する
console.log(obj3.f1);
console.log(obj3.f1);
console.log(obj3.f1);
obj3.f1 = 100; //セッターメソッドを実行する
console.log(obj3.f1);
console.log(obj3.f1);
console.log(obj3.f1);
出力結果は次のようになります。
50 51 52 100 101 102
上記のように、関数内にローカル変数を持たない場合でも、
引数を渡してその値をコントロール(セッター&ゲッター)することにより、
内部の値を保持するような形で処理することができています。