Hatena::Groupjavascript

lnzntのJavaScript日記 このページをアンテナに追加 RSSフィード

2010年11月09日(火)

クロージャ(その3)

| 09:28 |  クロージャ(その3) - lnzntのJavaScript日記 を含むブックマーク はてなブックマーク -  クロージャ(その3) - lnzntのJavaScript日記  クロージャ(その3) - lnzntのJavaScript日記 のブックマークコメント

もっとシンプルな例

参考

function makeCounter() {
  var count = 0;
  return function() { return count++; };
}

var counter = makeCounter();
var count = 20;      // これは影響しない
counter();   // 0
counter();   // 1
counter();   // 2

関数を定義した環境の寿命が尽きていても同じ。

var counter = function () {
  var count = 0;
  return function() { return count++; };
}();
counter();   // 0
counter();   // 1
counter();   // 2

参考。Ruby で。

コールバック

| 09:06 |  コールバック - lnzntのJavaScript日記 を含むブックマーク はてなブックマーク -  コールバック - lnzntのJavaScript日記  コールバック - lnzntのJavaScript日記 のブックマークコメント

コールバック
send_request_async(request, function (response) {
   handle(response);
});
参考書籍

クロージャ(その2)

| 08:58 | クロージャ(その2) - lnzntのJavaScript日記 を含むブックマーク はてなブックマーク - クロージャ(その2) - lnzntのJavaScript日記 クロージャ(その2) - lnzntのJavaScript日記 のブックマークコメント

コンストラクタ呼び出しパターンを置き替える
var quo = function (status) {
    return {
        get_status : function () {
            return status;
        }
    }
};

var myQuo = quo("hatena");
myQuo.get_status();       // => "hatena"
参考書籍