一道函数柯里化的面试题

题目如下:

    // 1.构造函数 currying,实现如下操作, (部分实施)
    const f = (a, b ,c) => {
        return a + b + c;
    };

    const g = currying(f, 1);
    g(2, 3); // -> 6

    const g2 = currying(f, 1, 2);
    g2(3); // -> 6

    // 2.构造函数 currying,实现如下操作, (柯里化)
    const f = (a, b, c) => {
        return a + b + c;
    };
    const g = currying(f);

    g(1)(2)(3) // -> 6 

当我看到这个题的时候还没了解过什么是函数柯里化,于是我是这么做的:

    // 1.
    function currying(fun) {
        let arg = Array.prototype.slice.call(arguments, 1);

        return function(){
            return fun(...arg, ...arguments);
        }
    }
    
    // 2.
    function currying(fun) {
        let f = function () {
            f.arg? f.arg.push(arguments[0]): f.arg = [arguments[0]];
            return f;
        };

        f.toString = function() {
            return fun(...f.arg);
        };

        return f;
    }

最后运行结果是正确的,做完以后查了一下函数柯里化的概念,总结:
简而言之,函数柯里化就是把接收多个参数的函数转变为接收一个单一参数的函数,并且返回接收余下参数的函数.

作用:

  • 提高适用性;
  • 延迟执行;
  • 固定易变因素;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容