美文网首页
函数柯里化的应用

函数柯里化的应用

作者: 菜鸡前端 | 来源:发表于2021-09-11 12:32 被阅读0次

百度百科:在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。这个技术由 Christopher Strachey 以逻辑学家 Haskell Curry 命名的,尽管它是 Moses Schnfinkel 和 Gottlob Frege 发明的。

通俗的说,柯里化是指一个函数,他接收函数作为参数,运行后能够返回一个新的函数。并且这个新的函数能够处理函数A的剩余参数,完整柯里化通常依赖 JS 的闭包。

function curry(fn) {
  let arr = [];
  return function curried(...args) {
    arr = [...arr, ...args]
    if (arr.length > fn.length) {
      return fn(...arr);
    }
    return curried;
  }
}

function sum(a, b, c) {
  return a * b * c;
}

let sum2 = curry(sum)
let sum3 = curry(sum)
console.log(sum2(1)(2)(2, 3)) // 4
console.log(sum3(1)(2)(3, 2)) // 6

上面的例子中,被传入的函数 fn 的调用时机,依赖于它自身的参数个数,当闭包属性 arr 长度达到要求后,才会被调用。这样的需求我个人感觉不多,那么函数柯里化的好处是什么?下面是柯里化更常用的一种场景:

// 更自由的组合参数
function createRequest(option, request) {
  return function (args) {
    return request({...option, ...args })
  }
}

function request(option) {
  return option;
}

let longRequest = createRequest({
  timeout: 24 * 3600 * 1000
}, request)

let longAndUserRequest = createRequest({
  api: '/user'
}, longRequest)

var res = longAndUserRequest({ name : '111' })
// api: "/user"
// name: "111"
// timeout: 86400000

它可以自由组合参数,让代码更简洁,比如 Function.prototype.bind 以及 axios.create 都使用了 函数柯里化的特性,我认为函数柯里化是一种设计模式,有点类似组合模式。这种组合方式缺点是:导致调用栈增加。

相关文章

  • 函数柯里化(应用)

    简介 本章着重讲解一下柯里化的应用,以利于对柯里化的理解和深入。柯里化只是一门技术,其实就是化简了代码。 事件监听...

  • 柯里化函数实现

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

  • 函数柯里化的应用

    函数柯里化,就是将一个接受多个参数的函数转化为接受单一参数的函数的技术。 以上代码中,add3 就是经过柯里化之后...

  • 函数柯里化的应用

    百度百科:在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个...

  • 手写简单.bind()实现

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

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

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

  • 实例方法在Swift中的柯里化

    实例方法在Swift中是一种把实例作为参数并且返回一个函数,并将这个函数应用于实例的方法。 柯里化 柯里化的理念是...

  • 函数操作v1.0.0

    目录 函柯里化函数节流函数防抖 正文 函柯里化 函数节流 函数防抖

  • swift 柯里化

    swift 柯里化 柯里化 1、什么是柯里化? 柯里化是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一...

  • 高阶函数应用 —— 柯里化与反柯里化

    参考https://www.pandashen.com/2018/06/23/20180623084025/ 前言...

网友评论

      本文标题:函数柯里化的应用

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