Skip to content

闭包题

实现 foo

实现一个 foo 函数,有以下效果

js
const f1 = foo(1, 2, 3)
console.log(f1.getValue()) // 6
const f2 = foo(1, 2)(3)
console.log(f2.getValue()) // 6
const f3 = foo(1)(2, 3)(4)
console.log(f3.getValue()) // 10
js
function foo(...arg) {
  // 存储传入的所有变量
  const arr = [...arg]

  function fn(...arg) {
    arr.push(...arg)
    return fn
  }

  fn.getValue = function () {
    return arr.reduce((sum, i) => sum + i, 0)
  }
  return fn
}