美文网首页
js 函数式编程之柯里化

js 函数式编程之柯里化

作者: Veycn | 来源:发表于2019-03-27 16:02 被阅读0次

将使用多个参数的函数转换成一系列使用一个参数的函数的技术。

主要用途是可以简化代码结构, 提高系统的可维护性, 一个方法, 只有一个参数, 强制地适应了单一性原则。

固定参数的柯里化

function add(a, b, c, d) {
    return a + b + c + d
}
function fixedParamsCurry(fn) {
    var _args = [].slice.call(arguments, 1)
    return function () {
        var newArgs = _args.concat([].slice.call(arguments, 0))
        return fn.apply(this, newArgs)
    }
}
var newAdd = fixedParamsCurry(add, 1, 2)
console.log(newAdd(3,4)); // 10

fixedParamsCurry的作用就是根据需求, 将参数拆分。实际这个函数做的事情很简单, 将第一次传递的不完全的参数截取出来, 在闭包中保留。 返回一个新的函数, 这个新的函数再次调用的时候, 就会补齐参数, 然后将两次传递进来的参数合并, 在将参数传递给功能函数(add)

这就是柯里化的基本雏形。

真正的柯里化应该长这样

function curry(){}
newAdd = curry(add)
newAdd(1)(2)(3)(4)
newAdd(1)(2, 3)(4)
newAdd(1, 2, 3)(4)

实现

function fixedParamsCurry(fn) {
    var _args = [].slice.call(arguments, 1)
    return function () {
        var newArgs = _args.concat([].slice.call(arguments, 0))
        return fn.apply(this, newArgs)
    }
}
function Curry(fn, length) {
    var len = length || fn.length
    return function () {
        if (arguments.length < len){   // 参数小于既定需要的参数
            // 如果上一次传递了 1 2,  [fn, 1, 2]
            var combined = [fn].concat([].slice.call(arguments, 0))
            return Curry(fixedParamsCurry.apply(this, combined), len - arguments.length)
        } else { // 参数传递完毕
            return fn.apply(this, arguments)
        }
    }
}
function add(a, b, c, d) {
    return a + b + c + d
}
var newAdd = Curry(add, 4)
console.log(newAdd(1, 2)(3)(4)); // 10

相关文章

  • JS函数式编程之柯里化

    JS函数式编程之柯里化 为什么要了解柯里化 柯里化是函数式编程必须要使用的. 这里我们就先介绍下什么是柯里化, 然...

  • js 函数式编程之柯里化

    将使用多个参数的函数转换成一系列使用一个参数的函数的技术。 主要用途是可以简化代码结构, 提高系统的可维护性, 一...

  • [译]JavaScript中的函数柯里化

    原文 Currying in JS 函数柯里化 函数柯里化以Haskell Brooks Curry命名,柯里化是...

  • 函数式编程

    1 文章目标 为什么要学习函数式编程以及什么是函数式编程 函数式编程的特性(纯函数、柯里化、函数组合等) 函数式编...

  • js柯里化

    标签: js柯里化 js柯里化 柯里化是什么在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成...

  • 猫眼

    var变量提升,函数声明提升,消除变量声明提升(let); 高阶函数,函数式的编程,柯里化 原型链继承,js面向对...

  • JS_函数柯里化

    JS_函数柯里化 与函数绑定密切相关的主体是函数柯里化(function currying),它用于创建已经设置好...

  • 函数式编程(三)—— 柯里化

    柯里化Lodash中的柯里化 —— curry()案例柯里化原理模拟柯里化总结 【函数式编程总体设计】 之前讲了函...

  • Swift函数式编程与面向协议编程

    函数式编程(FP) 一、函数式编程(FP)-高阶函数 二、函数式编程(FP) - 柯里化(Currying) 三、...

  • Swift Currying(柯里化)

    Swift Currying(柯里化) 标签(空格分隔): swift 函数式编程思想先举一个小例子: 显然这种编...

网友评论

      本文标题:js 函数式编程之柯里化

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