JavaScript のクロージャとは
クロージャが分かっているようではっきりせずにいたのでまとめておきます。
◾️ クロージャの特徴
外側のローカル変数を関数内に閉じ込めてオブジェクトのように扱うことができます。
クロージャのメリットは、オブジェクトの変数やメソッドを他のプログラムから簡単に変更されないように制御できることです。
入れ子、関数を返す関数でクロージャは役立ちます。
var count = 0;
function cu(){
return ++count
}
console.log(cu()); // 1
console.log(cu()); // 2
グローバル変数countは cu関数によるクロージャに閉じ込められ、プログラムが終わるまで存在し続けます。
function cu(){
var count = 0;
return ++count
}
console.log(cu()); // 1
console.log(cu()); // 1
上と似ていますが、ローカル変数countは cu関数内のみで存在
function cFunc() {
function cf() {
var word = "Hello!";
function say () {
console.log(word);
}
return say;
}
var mf = cf();
mf(); // Hello!
関数の外の変数を参照できる
function count(int) {
function counter() {
console.log(++int);
}
return counter;
}
var c1 = count(0);
c1(); // 1
c1(); // 2
c1(); // 3
c1(); // 4
var c2 = count(15);
c2(); // 16
c2(); // 17
c2(); // 18
変数はクロージャごとに保持されるので、2つのクロージャc1 c2 が生成されて、変数intを個別にカウントアップしています。
参考サイト: JavaScriptでクロージャー