クロージャメソッド

戻り値となっているオブジェクトのメソッドが、外側関数にあるローカル変数(仮引数)を維持している。

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