前端面试经典算法---柯里化

题目描述

已知 fn 为一个预定义函数,实现函数 curryIt,调用之后满足如下条件:

  1. 返回一个函数 a,a 的 length 属性值为 1(即显式声明 a 接收一个参数)
  2. 调用 a 之后,返回一个函数 b, b 的 length 属性值为 1
  3. 调用 b 之后,返回一个函数 c, c 的 length 属性值为 1
  4. 调用 c 之后,返回的结果与调用 fn 的返回值一致
  5. fn 的参数依次为函数 a, b, c 的调用参数

示例

输入:

var fn = function (a, b, c) {return a + b + c}; curryIt(fn)(1)(2)(3);

输出:

6

实现函数代码

function curryIt(fn) {
    var length = fn.length,  //获取fn函数的参数长度,即参数的个数
        args = [];    //声明一个数组args
    var result =  function (arg){
        args.push(arg);  ////将curryIt后面括号中的参数放入数组args
        length --;
        if(length <= 0 ){
            return fn.apply(this, args);
        } else {
            return result;
        }
    }
     
    return result;
}

算法核心

柯里化是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。简单理解题目意思,就是指,我们将预定义的函数的参数逐一传入到curryIt中,当参数全部传入之后,就执行预定义函数。

猜你喜欢

转载自blog.csdn.net/m0_37686205/article/details/89949757
今日推荐