qappleh / Interview

我是追梦赤子心,公众号「深圳湾码农」的作者,某上市集团公司高级前端开发,深耕前端领域多年,每天攻破一道题,带你从0到1系统构建web全栈完整的知识体系!
https://github.com/qappleh/Interview
1.15k stars 97 forks source link

第247题(2020-07-01):手写代码实现一个JS函数柯里化? #250

Open qappleh opened 4 years ago

ustchcl commented 4 years ago
function asArray(arrayLike) {  
  let arr = new Array(arrayLike.length)
  for (let i = 0; i < arrayLike.length; ++i) {
    arr[i] = arrayLike[i]
  }
  return arr
}

function curry(f) {
  const len = f.length
  return function curriedFn() {
    const args = asArray(arguments)
    if (args.length < len) {
      return function () {
        return curriedFn.apply(null, args.concat(asArray(arguments)));
      }
    }
    return f.apply(null, args)
  }
}

function add(a, b) {
  return a + b
}

const add2 = curry(add)(2)

console.log([1, 2, 3].map(add2)) // [ 3, 4, 5 ]

typescript下其类型描述过于繁琐, 我项目一般只描述到7个参数的柯里化.