JavaScriptは、クロージャをサポートしている。
クロージャとは、関数の内部で、変数と無名関数を定義し、無名関数の内部から、変数を参照すること。
引数を扱うこともできる。
構文
function 関数() {
var 変数A = 値;
return function () { // 無名関数
// 変数Aを参照
}
}
var 変数B = 関数();
変数B(); // 関数内で定義した無名関数を呼び出す
var 変数A = 値;
return function () { // 無名関数
// 変数Aを参照
}
}
var 変数B = 関数();
変数B(); // 関数内で定義した無名関数を呼び出す
サンプル
<script type="text/javascript">
function funcCounter() {
var $num = 0;
return function() { // 無名関数
$num += 1;
return $num;
}
}
var varCounter = funcCounter();
document.write( varCounter() + "<br />" );
document.write( varCounter() + "<br />" );
document.write( varCounter() + "<br />" );
</script>
function funcCounter() {
var $num = 0;
return function() { // 無名関数
$num += 1;
return $num;
}
}
var varCounter = funcCounter();
document.write( varCounter() + "<br />" );
document.write( varCounter() + "<br />" );
document.write( varCounter() + "<br />" );
</script>
↓↓↓出力結果↓↓↓