美文网首页
一道函数柯里化的面试题

一道函数柯里化的面试题

作者: 猫仔哦 | 来源:发表于2016-11-30 22:25 被阅读95次

    题目如下:

        // 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;
        }
    

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

    作用:

    • 提高适用性;
    • 延迟执行;
    • 固定易变因素;

    相关文章

      网友评论

          本文标题:一道函数柯里化的面试题

          本文链接:https://www.haomeiwen.com/subject/ipmtmttx.html