クロージャ関数は、戻り値となっている関数内関数であり、かつ、外側関数にあるローカル変数を参照しているもの。外側関数が終わった後も、外側関数のローカル変数が維持される仕組み。
// クロージャ関数: 戻り値となっている関数内関数が外側関数にあるローカル変数を維持
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('トマト') // マウス => スクリプト => トマト