Javascript函数柯里化及其应用场景
1.什么是柯里化
柯里化,英语:Currying,是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。
2.柯里化的用途
参数复用
看下面这个例子:
function uri (protocol,hostname,pathname){return `${protocol}${hostname}${pathname}`;
}const uri1 = uri("https://","www.csdn.net","/blog");
console.log(uri1);
在这个函数中,protocol
这个参数可能每个url都会用到,会造成参数重复。
优化如下:
function uri_curring (protocol){return function(hostname,pathname){return `${protocol}${hostname}${pathname}`;}
}const uri_https = uri_curring("https://");
console.log(uri_https);
const uri1 = uri_https("www.csdn.net","/blog");
console.log(uri1);
[Function]
https://www.csdn.net/blog
上面的代码将接受多个参数的函数改造为只接受一个参数的函数。这个函数内部返回了一个接受其余参数的函数,由作用域链可知,被返回的最内层函数可以访问外层函数的参数,故可在最内层函数完成原有所有参数的处理。
兼容性检测:提前确认/提前返回
const whichEvent = ( function () {// 优先判断addEventListenerif(window.addEventListener){return function(element,type,listener,useCapture){element.addEventListener(type,function(e){listener.call(element,e);},useCapture);}// 判断IE }else if(window.attchEvent){return function(element,type,handler){element.attchEvent('on'+element,function(e){handler.call(element,e);});}}
} )();
延迟执行
// add(1)(2)(3) = 6;
// add(1,2,3)(4) = 10;
// add(1)(2)(3)(4)(5) = 15;
function add(){let args = Array.prototype.slice.call(arguments);let inner = function(){args.push(...arguments);return inner;}inner.toString = function(){return args.reduce(function(prev,cur){return prev + cur;});}return inner;
}console.log(add(1)(2)(3));
Javascript函数柯里化及其应用场景相关推荐
- JavaScript函数柯里化详解
目录 一.简单了解apply和call 二.什么是函数柯里化? 三.写一个公共的柯里化函数 四.创建一个灵活的柯里化函数 五.写一个可控制的执行时间的柯里化函数 一.简单了解apply和call ca ...
- 带你看懂javascript函数柯里化(currying)
1.什么是柯里化 这里参照百度百科: 在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技 ...
- 什么是函数柯里化,函数柯里化的应用场景,函数柯里化的优缺点
函数柯里化 1. 什么是函数柯里化? 2. 函数柯里化面试题 3. 应用场景 1. 什么是函数柯里化? 函数柯里化是js闭包的典型应用.所以缺点就是闭包造成的缺点,占用内存较多等 什么是函数柯里化?就 ...
- JavaScript函数柯里化
一.简单了解apply和call call 和 apply 都是为了改变某个函数运行时的 context 即上下文而存在的,换句话说,就是为了改变函数体内部 this 的指向. call 和 appl ...
- JavaScript 中函数 柯里化风格的运用
导语 当我第一次看见 柯里化 这个词语的时候,我也表现出一脸懵,在代码程序中,看见这种 "高大上"的一些词汇叫法的时候,下意识的会觉得这个概念很难很深奥,但是当冷静下来,去深究过后 ...
- js面试高频题:函数柯里化的实现(彻底弄懂)
函数柯里化的适用场景有: 1. 参数复用 2. 延时执行 3. 提前确认 函数柯里化的核心在于:函数里面返回函数,从而做到参数复用的目的. 我们以一个js经典面试题为例开始讲解: 实现一个函数,使得满 ...
- 了解js基础知识中的作用域和闭包以及闭包的一些应用场景,浅析函数柯里化
js基础知识中的作用域和闭包 一.作用域 1.作用域.自由变量简介 (1)作用域定义 (2)作用域实例演示 (3)自由变量定义 (4)自由变量实例演示 2.作用域链简介 (1)作用域链定义 (2)作用 ...
- JavaScript 专题之函数柯里化
JavaScript 专题系列第十三篇,讲解函数柯里化以及如何实现一个 curry 函数 定义 维基百科中对柯里化 (Currying) 的定义为: In mathematics and comput ...
- 【JavaScript】函数柯里化
文章目录 1. 什么是函数柯里化 2. 柯里化常用场景 2.1 参数复用 2.2 提前返回 2.3 延迟执行 3. 经典例题 3.1 封装通用柯里化函数 3.2 创建一个灵活的多步执行的柯里化函数 3 ...
最新文章
- 苹果手表可以运行 ruby 脚本了
- 自动化运维工具Saltstack详细介绍
- 解决:object_detection/protos/*.proto: Invalid argument.
- android 隐藏键盘时ui延迟恢复,android 软键盘的显示与隐藏问题的研究
- input输入数字验证
- Android 系统(104)---浅谈ANR及log分析ANR
- 小程序modal控件(显示为弹框) 可有输入框
- UVALive 4998	Simple Encryption
- Xamarin.Android开发实践(一)
- 老将回归,英特尔的复兴之路
- 手机联系人分组名字都没了_艺术签名手写设计,每个名字都应该是精品,只是你没找对方法...
- 电子元器件/模块供应商汇总
- SwiftUI Button精品组件之完美的SwiftUI抖动按钮效果(教程含源码)
- Excel/WPS如何查找重复数据
- 月薪超1.6万美元!对冲基金实习生也内卷
- 设计一个用于人事管理的People(人员)类
- c语言实现采集设备snmp信息,使用snmpwalk采集设备的OID信息
- 1.1.2续 特殊二极管部分选型
- 孝经白话:庶人章第六
- C# wpf无法打开osk.exe解决方法