読者です 読者をやめる 読者になる 読者になる

何で()()で実行するんだっけ?

JavaScript クロージャ

Life is beautiful: Javascript、クロージャを使ったプライベート関数の隠蔽について

同じオブジェクトを使い回したい場合にはクロージャを使うんだ」とコードを書き直す三郎。

var code2name = (function(){
  var mapping = {
   'us': 'United States',
   'ja': 'Japan',
   'ko': 'Korea',
   'ru': 'Russa',
   'uk': 'United Kingdom',
   'fr': 'France',
   'cc': 'China',
   'gw': 'Germany' 
  };
  return function(code) { return mapping[code] || '(unknown)';};
})();

朝でボーっとしてるせいか何でカッコで囲むんだっけ?と思い確認した。

var date1 = function() {
    return function() {
        return new Date();
    }
}

var date2 = (function() {
    return function() {
        return new Date();
    }
})()

for (var i=0; i<2; i++) {
    alert('date1 : ' + date1()); // function() {return new Date();}
    alert('date2 : ' + date2()); // 日付が出る
}

そりゃそだな。date1は戻り値が関数だから、毎回実行しても戻り値の関数を参照しちゃうよね。
date2は変数化した時の初めに実行してるからその時点で内部の関数を参照することになると。

考えるよりも結果見た方が早かったので覚書。