当前位置:网站首页>函数柯里化(curry)
函数柯里化(curry)
2022-08-10 17:19:00 【Echo-潔】
1、概念
把一个多参数的函数,转化为单参数函数。
2、代码演示
// 柯里化之前
function add(x, y) {
return x + y;
}
add(1, 2) // 3
// 柯里化之后
function addX(y) {
return function (x) {
return x + y;
};
}
addX(2)(1) // 3
扩展一道经典面试题
// 实现一个add方法,使计算结果能够满足如下预期:
add(1)(2)(3) = 6;
add(1, 2, 3)(4) = 10;
add(1)(2)(3)(4)(5) = 15;
function add() {
// 第一次执行时,定义一个数组专门用来存储所有的参数
var _args = Array.prototype.slice.call(arguments);
// 在内部声明一个函数,利用闭包的特性保存_args并收集所有的参数值
var _adder = function() {
_args.push(...arguments);
return _adder;
};
// 利用toString隐式转换的特性,当最后执行时隐式转换,并计算最终的值返回
_adder.toString = function () {
return _args.reduce(function (a, b) {
return a + b;
});
}
return _adder;
}
add(1)(2)(3) // 6
add(1, 2, 3)(4) // 10
add(1)(2)(3)(4)(5) // 15
add(2, 6)(1) // 9
边栏推荐
- 什么是开源中的 “胖虎效应”
- router.afterEach()
- 网易云信亮相LiveVideoStackCon2022,解构基于WebRTC的开源低延时播放器实践
- kuangbin专题一 简单搜索
- 电力系统潮流计算(牛顿-拉夫逊法、高斯-赛德尔法、快速解耦法)【6节点 9节点 14节点 26节点 30节点 57节点】(Matlab代码实现)
- 【接入指南 之 直接接入】手把手教你快速上手接入HONOR Connect平台(上)
- R语言检验时间序列的平稳性:使用fUnitRoots包中的adfTest函数检验时间序列数据是否具有平稳性(设置参数type为nc时、既不去除趋势也不进行中心化处理)
- 长markdown文档的拆分与合并
- 架构-三层架构:三层架构
- skywalking vulnerability learning
猜你喜欢
随机推荐
R语言ggplot2可视化:使用ggpubr包的text_grob函数和as_ggplot函数可视化文本段落(将指定文本段落可视化出来、指定文本段可视化为图像)、face参数指定文本的字体样式
产品-Axure9英文版,A页面内a1状态跳转B页面的b2状态,(条件跳转状态)
【科研】常见火灾数据集
nacos服务注册
ARM开发(三)ARM寻址方式,异常中断,异常向量表
在 Istio 服务网格内连接外部 MySQL 数据库
初始网络原理
长markdown文档的拆分与合并
R语言使用oneway.test函数执行单因素方差分析(One-Way ANOVA)、使用数据集的子集数据进行单因素方差分析(subset函数筛选数据子集)
LeetCode-2. Add Two Numbers
mysql包select结果无法同步的问题
leetcode:1013. 将数组分成和相等的三个部分
BalsnCTF2021
Go-Excelize API源码阅读(六)—— DeleteSheet(sheet string)
挑战用五行代码轻松集成登录系统,实现单点登录
DGIOT平台实时展示OPC上报数据全流程代码剖析
「软件架构」10种常见的软件架构模式
多线程与高并发(11)——经典面试题之实现一个容器,提供两个方法,add,size。
【JDK】Oracle又一个JDK大版本停止扩展技术支持
Pytorch GPU模型推理时间探讨2——显卡warm up