柯里化

一文搞懂Javascript中的函数柯里化(currying) 在使用JavaScript编写代码的时候,有一种函数式编程的思想,而提到函数式编程,一定绕不开一个概念,那就是柯里化。柯里化是编程语言中的一个通用的概念(不只是Js,其他很多语言也有柯里化),是指把接收多个参数的函数变换成接收单一参数的函数,嵌套返回直到所有参数都被使用并返回最终结果。f(a,b,c)f(a)(b)(c)的过程。柯里化不会调用函数,它只是对函数进行转换。柯里化是一个把具有较多 arity 的函数转换成具有较少 arity 函数的过程 -- Kristina Brainwave。 阅读详情

一。柯里化(curry )的 的概念很简单:只传递给函数一部分参数来调用它,让它返回一个函数去处理剩下的参数。

二。具有通用性和高适用。

三。常见作用:1、参数复用。2、提前返回。3、 延迟计算/运行

四。实例。

 (1)参数复用:

function add(a) {
  return function (b) {
    return function (c) {
      return a + b + c
    }
  }
}

let add1 = add(1)
console.log(add1(2)(3)) // 6
console.log(add1(4)(5)) // 10
let add2 = add1(2)
console.log(add2(4)) // 7
console.log(add2(5)) // 8

如上面代码里面的add1就是复用参数:1,而add2则复用了参数:1和2两个参数。
(2)提前返回。

var addEvent = (function(){
    if (window.addEventListener) {
        return function(el, sType, fn, capture) {
            el.addEventListener(sType, function(e) {
                fn.call(el, e);
            }, (capture));
        };
    } else if (window.attachEvent) {
        return function(el, sType, fn, capture) {
            el.attachEvent("on" + sType, function(e) {
                fn.call(el, e);
            });
        };
    }
})();

addEvent('span', 'click', function () {}, false)
addEvent('div', 'click', function () {}, false)
addEvent('p', 'click', function () {}, false)
addEvent('div', 'dblclick', function () {}, false)

如上面代码对于监听事件的判断则只会走一次,如果是传统函数则会多次执行。则真是提前返回的好处。

(3)延迟计算/运行

let allScore = 0
let curryScore = function (fn) {
  let allScore = []
  return function () {
    if (arguments.length === 0) {
      return fn.apply(null, allScore)
    } else {
      allScore = allScore.concat([].slice.call(arguments))
    }
  }
}

let curryAddScore = curryScore(function (...val) {
  for (let i = 0; i < val.length; i++) {
    allScore += val[i]
  }
})

curryAddScore(2)
curryAddScore(3)
curryAddScore(1)
console.log(allScore)
curryAddScore(3)
curryAddScore()
console.log(allScore)

如上面代码只有在参数传递完成时才会进行统计。这就是延迟计算/运行的结果

Clang Static Analyzer 使用教程:本地 + CMake + GitHub Actions 自动静态分析实战 本文介绍了ClangStaticAnalyzer静态代码分析工具的使用方法。该工具基于Clang/LLVM,可检测C/C++代码中的内存泄漏、空指针等常见错误。主要内容包括:安装指南(Ubuntu/macOS/Windows)、命令行使用方法、CMake项目集成方案、GitHub Actions自动化分析配置,以及HTML报告生成与查看。文章还提供了官方资源链接,帮助开发者系统掌握从本地调试到持续集成的完整静态分析工作流,提升代码质量保障能力。适用于需要在开发过程中实施静态分析的C/C++项目。 阅读详情

相关推荐

Ubuntu下Vim创建属于自己的头部注释和代码模板

痛点 每次打开vim想写个C或者C++的程序都要把固定的模板敲一遍,是不是感觉非常的繁琐,能不能把Vim弄得像IDE那样新建一个文件直接生成对应的头部注释和代码模板,减少这些重复工作呢?下面我尽量详细的介绍实现的方法: 先看看新建文件后的效果 C语言格式效果 C++语言效果 方法: 使用命令 vi /etc/vim/vimrc 打开vimrc这个文件,然后复制以下代码至文件末尾的空白处即可! 修改vimrc文件里面的内容必须要用root管理员身份才能进行修改,修改时先切换至root身份即可。 "新建.

weixin_42137584的博客 1562

Javascript 中的柯里化与反柯里化

柯里化是将接受多个参数的函数转换成一系列只接受单个参数的函数的过程。柯里化函数的返回值仍然是一个函数,该函数接受一个参数,并返回一个新的函数,直到所有参数都被处理完毕,最终返回最终结果。反柯里化是将柯里化函数转换成接受多个参数的函数的过程。反柯里化函数的返回值是一个函数,该函数接受一个对象作为参数,并调用该对象的原本方法并传递参数。本文介绍了Javascript中的柯里化和反柯里化技术。柯里化可以将接受多个参数的函数转换成一系列只接受单个参数的函数,从而使得函数更加灵活、可复用和组合。

梦是太匆 1773

SAP S4业务伙伴(BP)实战指南:从角色分配到数据同步的完整流程

本文详细解析了SAP S4业务伙伴(BP)功能,从基础概念到实战操作,涵盖角色分配、数据同步及常见问题排查。通过BP机制,企业可高效管理客户、供应商等多重身份,实现数据共享和动态切换,显著提升主数据管理效率。特别适合SAP实施顾问和ERP管理员参考。

y2z3a4b5c的博客 872

柯里化是什么

柯里化 (Currying): 当一个函数有多个参数的时候先传递一部分参数调用它(这部分参数以后永远不变) 然后返回一个新的函数接收剩余的参数,返回结果 下图示例是普通函数与柯里化函数(纯函数)的对比 //普通的函数 function checkAge (min,age) { return age >= min } console.log(checkAge(18,20)); console.log(checkAge(18,24)) //高进阶纯函数(避免重复的1...

weixin_37883657的博客 3136

手把手教你用DLP4500和海康相机搭建双目结构光系统(附完整代码获取路径)

本文详细介绍了如何利用DLP4500投影仪和海康工业相机搭建低成本双目结构光三维测量系统。从硬件选型、软件配置到结构光编码解码实现,再到三维重建全流程,提供了完整的实战指南和优化技巧,帮助用户以不到2万元的预算实现0.05mm精度的三维扫描。

weixin_32447969的博客 318

Smali语言基础语法

定义、声明、调用 Smali数据类型 定义:与Java相同,Smali中也有一套数据类型体系,且该体系实质上是同Java一一对照的。 示例1:Smali——Java数据类型对照表 PS:如上图所示,Smali语言中的数据类型的关键词基本上为Java中同名数据类型的首字母大写,需要着重记忆的例外为:1.long类型的关键词为大写J;2.boolean类型的关键词为大写Z;3.数组的关键词为左半边中括号[;4.object类型(各种类)的关键词为大写L加上该类的全类名路径,路径中的层级用/分割。

aketoshknight的博客 1万+

函数柯里化详解

函数柯里化详解

博哥的二进制世界 1万+

MATPOWER的安装详细教程

MATPOWER的安装包实际为一个程序包,安装教程很简单,详见本文。

半个月亮Zz的博客 3万+

柯里化概念浅析

柯里化的核心:函数分解和延迟执行。通过闭包等方式逐步传递参数,直到所有参数收集完毕后再执行原函数

两只鱼,鱼鱼鱼鱼鱼 1002

Python爬虫实战:采集菜谱网站数据——以“下厨房”为例

随着互联网的发展,海量优质数据为各类应用提供了坚实基础。菜谱作为用户日常生活中需求极高的内容,丰富多样的菜谱数据不仅方便用户烹饪,也为美食推荐、营养分析等研究提供了数据支持。本文将围绕国内知名菜谱网站“下厨房”(https://www.xiachufang.com)展开,结合最新Python爬虫技术,详细讲解如何高效、规范地采集菜谱数据,包括菜谱名称、食材、步骤、评分、评论等丰富信息。全篇覆盖爬虫原理、框架选型、反爬应对、数据存储和简单分析,是学习爬虫实战的绝佳案例。菜谱标题作者信息菜谱图片。

2201_76125261的博客 1900

Pytorch实现之SRGAN+CBAM的结构设计

在SRGAN的残差连接中加入了CBAM注意力机制,同时设计了四类损失来训练。

LJ1147517021的博客 573

柯里化函数(Currying),什么是柯里化,为什么要进行柯里化,高级柯里化函数的实现

柯里化(Currying) 柯里化(Currying)是一种关于函数的高阶技术。它不仅被用于 JavaScript,还被用于其他编程语言。 柯里化是一种函数的转换,它是指将一个函数从可调用的 f(a, b, c) 转换为可调用的 f(a)(b)(c)。 柯里化不会调用函数。它只是对函数进行转换。 让我们先来看一个例子,以更好地理解我们正在讲的内容,然后再进行一个实际应用。 我们将创建一个辅助函数 curry(f),该函数将对两个参数的函数 f 执行柯里化。换句话说,对于两个参数的函数 f(a, b) 执行

秋天,黄叶坠地,凉风有信。 2万+

ransac拟合2D圆(三点定圆 c++详细版)

RANSAC(Random Sample Consensus,随机采样一致性)算法是一种基于随机采样的迭代算法,主要用于从一组包含大量噪声和异常值(外点)的数据中估计数学模型的参数。

twnkie的博客 1048

js函数柯里化详解

函数柯里化的实现

weixin_47450807的博客 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

前端进阶|一文理解柯里化的逆操作,什么是反柯里化

反柯里化(Uncurrying)是指将柯里化函数转换为接受多个参数的普通函数的过程。在函数柯里化中,一个多参数的函数被转换为接受一个参数并返回一个新函数的一系列嵌套函数。而反柯里化则是将这些嵌套函数重新组合成一个多参数的函数。具体来说,反柯里化是将一系列通过柯里化得到的函数,重新组合成一个函数,使得这个函数能够接受与原来多参数函数相同数量的参数,并且处理这些参数。简而言之,反柯里化是将柯里化函数还原成普通函数。

前端梦工厂 1487

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

浅析函数柯里化与反柯里化

浅析函数柯里化与反柯里化 1. 柯里化 柯里化(Currying),又称部分求值(Partial Evaluation),可以理解为提前接收部分参数,延迟执行,不立即输出结果,而是返回一个接受剩余参数的函数。因为这样的特性,也被称为部分计算函数。柯里化,是一个逐步接收参数的过程。 1.1 作用 柯里化有3个常见作用: 参数复用 提前返回 延迟计算/运行 先看一个简单示例,实现 add(1)...

audreylau的博客 1114

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Currying柯里化

fun f x = fn y => fn z => x + y + z, f函数接受参数x, 返回一个函数,这个函数接受参数y,返回一个函数,这个函数接受z, 返回x + y + z表达式的值。类型是 int -> int -> int -> int (等同于int -> (int -> (int -> int))。比如fun f (x, y, z) = x+y+z, 函数f,接受三个参数x, y, z,返回x + y + z表达式的值, 类型是int * int * int -> int。

weixin_42281226的博客 1594

函数柯里化

柯里化(Currying)是一个在函数式编程中常见的概念,它指的是将一个接受多个参数的函数转换成一系列使用一个参数的函数。柯里化的主要优势在于它可以增加函数的复用性,并使得函数的组合更加灵活。举例来说,一个接收3个参数的普通函数,在进行柯里化后, 柯里化版本的函数接收一个参数并返回接收下一个参数的函数, 该函数返回一个接收第三个参数的函数。最后一个函数在接收第三个参数后, 将之前接收到的三个参数应用于原普通函数中,并返回最终结果。Javascript实际应用中的柯里化函数,可以传递一个或多个参数。

猫老板的豆 864

JS函数柯里化

柯里化 JS

web$-小白 4753

JavaScript函数柯里化

一、简单了解apply和call call 和 apply 都是为了改变某个函数运行时的 context 即上下文而存在的,换句话说,就是为了改变函数体内部 this 的指向。 call 和 apply二者的作用完全一样,只是接受参数的方式不太一样。call其实是apply的一种语法糖。 格式:apply(context,[arguments]),call(context,param1,param2,...)。 二、什么是函数柯里化? 柯里化(Currying)是把接受多个参数的函数变换成接受一

天界程序员的博客 1221

详解JavaScript函数柯里化

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

大菜鸟的博客 5577

前端 js 柯里化和反柯里化

函数柯里化currying的概念最早由俄国数学家Moses Schönfinkel发明,而后由著名的数理逻辑学家Haskell Curry将其丰富和发展,currying由此得名。本文将详细介绍函数柯里化(curring) 定义: 柯里化,可以理解为提前接收部分参数,延迟执行,不立即输出结果,而是返回一个接受剩余参数的函数。因为这样的特性,也被称为部分计算函数。柯里化,是一个逐步接收参数的过程...

alokka的博客 963

什么是反柯里化

在 JavaScript 中,反柯里化(Uncurrying)是一种将柯里化函数转换回接受多个参数的普通函数的技术,其核心目的是扩大函数的适用性,使原本仅适用于特定对象的方法能够被任意对象调用。

qq_40576344的博客 921

柯里化与反柯里化

作者:我是leon地址:https://juejin.cn/post/6844903645222273037前言柯里化,可以理解为提前接收部分参数,延迟执行,不立即输出结果,而是返回一个接受剩余参数的函数。因为这样的特性,也被称为部分计算函数。柯里化,是一个逐步接收参数的过程。在接下来的剖析中,你会深刻体会到这一点。反柯里化,是一个泛型化的过程。它使得被反柯里化的函数,可...

zz_jesse的博客 310

JS之柯里化

文章目录什么是柯里化柯里化的实现高级柯里化 什么是柯里化 柯里化(Currying)是一种关于函数的高阶技术,它不仅被用于JavaScript,也能用于其他语言 柯里化是一种函数 转换,让函数具有完整功能的同时,也能接受可选的参数。它能将一个函数从f(a,b,c)转换为f(a)(b)( c ) 柯里化是一种将函数进行转换的技术,而不会去调用函数 柯里化的实现 实现柯里化 //构造柯里化函数 function curry(fun){ return function(a){ re

simon的博客 383

函数柯里化的意义_函数柯里化是什么?

点击上方蓝色字体轻松关注前言在计算机科学中,柯里化(Currying),是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。为什么会有函数柯里化呢?Currying 的重要意义在于可以把函数完全变成「接受一个参数;返回一个值」的固定形式,这样对于讨论和优化会更加方便。将关注的重点聚焦到函数本身,而不因冗余的数据参数...

weixin_40005795的博客 1397
上一篇: async 异步代码同步化处理
下一篇: axios 导出
黄祚敏
博客等级 码龄10年 22粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值