美文网首页
柯里化的实现

柯里化的实现

作者: 六月繁花开 | 来源:发表于2018-08-27 19:23 被阅读8次

通用版

function curry(fn) {

    var args = Array.prototype.slice.call(arguments, 1);

return function() {

var newArgs = args.concat(Array.prototype.slice.call(arguments));

        return fn.apply(this, newArgs);

    }

}

执行:

functionmultiFn(a, b, c){

    return a * b * c;

}var multi = curry(multiFn);

multi(2,3,4);

改进版

就题目而言,是需要执行三次函数调用,那么针对柯里化后的函数,如果传入的参数没有 3 个的话,就继续执行 curry 函数接收参数,如果参数达到 3 个,就执行柯里化了的函数。

function curry(fn, args) {

    var length = fn.length;

    var args = args || [];

    return function(){

        newArgs = args.concat(Array.prototype.slice.call(arguments));

        if(newArgs.length < length){

            return curry.call(this,fn,newArgs);

        }else{

            return fn.apply(this,newArgs);

        }

    }

}

function multiFn(a, b, c) {

    return a * b * c;

}

var multi = curry(multiFn);

multi(2)(3)(4);

multi(2,3,4);

multi(2)(3,4);

multi(2,3)(4);

优化版

function multi() {

    var args = Array.prototype.slice.call(arguments);

var fn = function() {

var newArgs = args.concat(Array.prototype.slice.call(arguments));

        return multi.apply(this, newArgs);

    }

    fn.toString = function() {

        return args.reduce(function(a, b) {

            return a * b;

        })

    }

    return fn;

}

最后这个其实是利用了toString()函数的返回值为String类型。返回当前对象的字符串形式。

相关文章

  • 手写简单.bind()实现

    手写一个实现柯里化的.bind() 柯里化:《函数柯里化小结》柯里化:前端开发者进阶之函数柯里化Currying ...

  • 函数柯里化

    函数柯里化,实现累加。

  • js柯里化

    柯里化函数的实现hyCurrying

  • 柯里化函数实现

    柯里化函数实现 柯里化函数的实现实质上是一个收集参数的过程, 也许柯里化的内涵及应用场景理解起来比较困难, 但是实...

  • 柯里化的实现

    通用版 function curry(fn) { var args = Array.prototype.sli...

  • 函数-柯里化

    面试题-- 函数柯里化怎么实现

  • 柯里化和自动柯里化函数实现

    柯里化定义 维基百科定义 是把接收多个参数的函数,变成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受...

  • JavaScript 柯里化

    简介 柯里化从何而来 柯里化, 即 Currying 的音译。 Currying 是编译原理层面实现多参函数的一个...

  • JS模拟实现bind,call,apply

    call apply bind 简单实现 函数柯里化的实现 构造函数的实现 ES6实现 结合实现

  • JavaScript函数柯里化

    概念 函数柯里化是指将一个多参数的函数转化成多个一个参数调用的函数的过程。 实现 柯里化的实现方式很多,如下: 此...

网友评论

      本文标题:柯里化的实现

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