簡単な例
たとえば下のコード。
var myObject = function(){ var value=0; return{ increment: function(){ value +=1; }, getValue: function(){ return value; } }; }();
このコードでは変数myObjectに対して、incrementとgetValueというメソッドを持つオブジェクトが代入されています。
increamentとgetValueは、外側にある無名関数の変数valueにアクセスしていますよね。これがクロージャ。たぶん。
「でもこの無名関数が実行された後は変数valueは消えちゃうんじゃないの?」とか普通は思いますよね。
ところが驚くべきことに、いったんmyObjectが生成されたあとも、incrementメソッドとgetValueメソッドはこの変数valueにアクセスできてしまいます。
myObject.getValue(); >>0 myObject.increment(); myObject.increment(); myObject.increment(); myObject.getValue(); >>3
クロージャすげえ!