戻り値となっているオブジェクトのメソッドが、外側関数にあるローカル変数(仮引数)を維持している。
function 返します(x) { // xは借金額
return {
利息: () => {
console.log('利息で計', ++x)
},
n倍返し: (n) => {
console.log(x * n)
},
}
}
const 借りた3円 = 返します(3)
const 借りた7円 = 返します(7)
// それぞれのクロージャが外側関数のローカル変数をそれぞれの内容で維持
借りた7円.利息() // 利息で計 8
借りた3円.n倍返し(2) // 6
借りた7円.n倍返し(10) // 80