クロージャ(その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
上記のように、関数内にローカル変数を持たない場合でも、
引数を渡してその値をコントロール(セッター&ゲッター)することにより、
内部の値を保持するような形で処理することができています。