2011-03-16

ドラゴンボールで学ぶオブジェクト指向」 のクロージャに関して

http://anond.hatelabo.jp/20110316202255 - ドラゴンボールで学ぶオブジェクト指向

また、ポイポイカプセルのように技を塊にして色んな人が使えるように出来ます

var shotKamehameha = new function(){
	//かめはめ波を打ちます。
}

noumin.kougeki = sendKamehameha;
buruma.kougeki = sendKamehameha;

noumin.kougeki();  //カメハメ波がでます

このような仕組みをクロージャと言います。クロージャクロージャの中に記述することも出来ます

って書いてるけど、クロージャってのはそういうものじゃないよなぁ、と。 まあファーストクラス関数オブジェクトっていうところはあってるけど、それだけでクロージャと言えるのかというとちょっと違う。

"a closure is a first-class function with free variables that are bound in the lexical environment." (Closure - Wikipedia) とあるように、関数内の変数レキシカルスコープに結び付けられているようなものがクロージャなのであるJavaScript で例を書くなら、次のようになる。

// クロージャを返す関数
var getClosure = function getClosure() {
    // クロージャからアクセスされる変数
    var counter = 0;
    // クロージャ
    var closure = function closure() {
        return counter++;
    };
    return closure;
};

// クロージャを取得
var closure = getClosure();

// クロージャを実行
closure(); //=> 0
closure(); //=> 1
closure(); //=> 2

匿名ダイアリーで大なり記号とか書くときってどうしたらいいんですかね... ">" ってなっちゃ

記事への反応 -

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん