(Web関連用語)
https://developer.mozilla.org/ja/docs/Web/JavaScript/Closures
関数とその関数が定義された状態をセットにした特殊なオブジェクトのこと。
JavaScriptは関数ごとにスコープが作られる。スコープとは変数を参照できる範囲のことである。その範囲外では変数は参照できない。
function func() {
var value = 1;
console.log(value);
}
func(); // 1
console.log(value); // undefined
クロージャの一つの利点として、変数をプライベートな変数として扱う事ができるようになる。
var module = (function() {
var count = 0;
return {
increment: function() {
count++;
},
show: function() {
console.log(count);
}
};
})();
module.show(); // 0
module.increment();
module.show(); // 1
console.log(count); // undefined
即時関数を用いてオブジェクトを生成している。moduleにはreturnされているオブジェクトが代入される。
ここで重要な事として、即時関数内のcountに関しては内側からしか参照できないという事である。外側からアクセスしようとした場合にはもちろん「undefined」となる。
これによりプライベートな変数として扱う事が可能となる。