クロージャ関数

クロージャ関数は、戻り値となっている関数内関数であり、かつ、外側関数にあるローカル変数を参照しているもの。外側関数が終わった後も、外側関数のローカル変数が維持される仕組み。

// クロージャ関数: 戻り値となっている関数内関数が外側関数にあるローカル変数を維持
function 外側関数(x) {
  let ローカル = x
  return function クロージャ() {
    console.log(ローカル)
  }
}

let クロージャ1 = 外側関数(1)
let クロージャ2 = 外側関数(2)
// それぞれのクロージャが、外側関数のローカル変数をそれぞれの内容で維持
クロージャ1() // 1
クロージャ2() // 2

クロージャ関数の使用例

function しりとり(x) {
  let 配列 = [x]
  return (x) => {
    if (x.startsWith(配列[配列.length - 1].substr(-1))) {
      配列[配列.length] = x
    }
    console.log(配列.join(' => '))
  }
}
let ゲーム1 = しりとり('りんご')
let ゲーム2 = しりとり('マウス')

// それぞれのクロージャが、外側関数のローカル変数をそれぞれの内容で維持
ゲーム1('ごくらく') // りんご => ごくらく 
ゲーム2('スクリプト') // マウス => スクリプト
ゲーム1('くみたいそうはごめんだ') // りんご => ごくらく => くみたいそうはごめんだ 
ゲーム2('トマト') // マウス => スクリプト => トマト