クロージャとは

クロージャは、関数が外側のスコープの変数にアクセスできるという性質のこと。
これにより、関数に状態をもたせるができる。

例 1: 基本的なクロージャ

function outer() {
  let outerVariable = 'outer function';

  function inner() {
    console.log(outerVariable);
  }

  return inner;
}

const myClosure = outer();
myClosure();  // "outer function" が出力される

inner() 関数が外側のスコープのouterVariableにアクセスできている。

例 2: クロージャを使ったカウンタ

function createCounter() {
  let count = 0;

  return function() {
    count++;
    return count;
  };
}

const counter = createCounter();

console.log(counter());  // 1
console.log(counter());  // 2
console.log(counter());  // 3

createCounter関数が返す関数(無名関数)は、外部のcount変数を「覚えて」いる。
これにより、createCounter関数に状態を持たせることができる。

クロージャのメリット

データのプライバシーとカプセル化: クロージャを使用すると、外部から直接アクセスできない「プライベート変数」を作成できる。これによりグローバル変数を減らし、コードの複雑性を減らすことができる。