[メモ][JavaScript] クロージャ

クロージャとは、「ローカル変数を参照している関数内関数」。

function closure(init) {
var counter = init;
return function() {
return ++counter;
}
}
var myClosure0 = closure(0);
var myClosure100 = closure(100);
console.log(myClosure0()); // 1
console.log(myClosure100()); // 101
console.log(myClosure0()); // 2
console.log(myClosure100()); // 102

var myClosure1 = closure(0) で、変数 myClosure0 に、function(){return ++counter} という匿名関数が登録される。その後は、myClosure0() を呼び出す度に、myClosure0 が内部で保持しているローカル変数 counter の値がインクリメントされて返される。

別の変数に格納されたクロージャは、別のスコープチェーンに属すので、myClosure0 と myClosure100 は、同じ名前のローカル変数 counter を内部に保持しているが、counter に入っている値は異なる。

※本文中のサンプルコードは、『JavaScript本格入門』p.165を参考にしている。


コメントを残す

コメントを残す