2021-06-04

实现一个curry方法,接受一个function然后返回一个柯里化过后的function。

这是一个例子 [代码] ...展开

/**
 * @param { (...args: any[]) => any } fn
 * @returns { (...args: any[]) => any }
 */
function curry(fn) {
  return function curryInner(...args) {
    if (args.length >= fn.length) return fn(...args);
    return (...args2) => curryInner(...args, ...args2);
  };
}
/**
 * @param {Function} func
 */
function curry(func) {
  return function curried(...args) {
    // 1. if enough args, call func 
    // 2. if not enough, bind the args and wait for new one
    
    if (args.length >= func.length) {
      return func.apply(this, args)
    } else {
      // 1,2
      return curried.bind(this, ...args)
    }
  }
}

WRITTEN BY

lidong

鄂ICP备20003892号Copyright © 2017-2023 leedong.cn

ABOUT ME

Hello,这里是「我的心情永不立冬」
一个想到什么就做什么的个人站点,所有内容纯主观、有偏见