こんにちは,
クロージャとは
クロージャはその定義を説明されてもなかなか理解できないため,
さて,
では,
関数の中の関数
function 関数A(){
var 変数a = 'a';
function 関数B(){
var 変数b = 変数a + 'b';
var 関数C = function(){
var 変数c = 変数a + 変数b + 'c';
alert(変数c); // aabc
}
関数C();
}
関数B();
}
関数A();
関数Aの中に関数Bを,
関数Bは関数Aの中に定義された関数
さてさて,
このように,
クロージャの生成と変数
function 関数A(){
var 変数a = 0;
function 関数B(){
変数a++;
}
関数B();
関数B();
alert(変数a); // 2
}
関数A();
関数A();
こちらは関数Aを2度呼び出しています。一度目の呼び出しでは2がalertされます。また,
クロージャと高階関数
function 関数A(){
var 変数a = 0;
function 関数B(){
return ++変数a;
}
return 関数B;
}
var 変数β = 関数A();
alert(変数β()); // 1
alert(変数β()); // 2
var 変数γ = 関数A();
alert(変数γ()); // 1
alert(変数β()); // 3
こちらはクロージャと前回取り上げた高階関数との組み合わせです。関数Aは関数Bを返すようにしたので,
一方で,
このあたりは少々ややこしくなってきましたね。とはいえ,
ここまででクロージャの解説はほぼ終わりです。ここからは実用的なケースを見ていきます。