JavaScript中pipe实战
JavaScript中pipe原理
代码示例
const pipe = (...fns) => x => fns.reduce((y, f) => f(y), x);
原理
一行代码中信息量是非常丰富的,可以从以下几个方面来分析
(...fns)
...
是ES6标准中的数组扩展运算符扩展运算符可以展开数组:
Math.max(...[1,2,3])
等价于Math.max(1,2,3)
同时与解构赋值结合起来,用于生成数组,上述代码示例中就是使用该方法,具体例子:
[...fns] = [1,2,3]
则fns=[1,2,3]
- 解构赋值:ES6允许按照一定模式从数组和对象中提取值,然后对变量进行赋值,这被称为解构;示例:
let [a,b,c] = [1,2,3]
- 解构赋值:ES6允许按照一定模式从数组和对象中提取值,然后对变量进行赋值,这被称为解构;示例:
=>
- 这个就是箭头函数了,左边是函数参数,右边是函数体
- 箭头函数有自己的特性,比如其中的this指向
- this的指向的是定义时所在的对象,而不是使用时所在的对象
- 不可以当做构造函数
- 不可以使用arguments对象,可以用rest参数代替
- rest参数是一种叫法,指的是(...variableName)这种写法的函数传参方式
- 不可以使用yield命令
reduce
- 该函数作用于数组对象
- 接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值
- 函数原型:Array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
- 我们可以定义函数function(total, currentValue, currentIndex, arr),作为个性化的逻辑处理部分,并手动指定初始值initialValue
- 初始值的作用在于首次执行自定义函数时,total参数的值为我们设置的初始值initialValue
- currentValue为当前数组的值,也就是currentValue === arr[currentIndex]
函数科里化
柯里化函数是一种由需要接受多个参数的函数转化为一次只接受一个参数的函数:如果一个函数需要3个参数,那柯里化后的函数会接受一个参数并返回一个函数来接受下一个函数,这个函数返回的函数去传入第三个参数,最后一个函数会应用了所有参数的函数结果。
将上述代码示例转换一下形式:
const pipe = function(x, ...fns) {
fns.reduce((y, f) => f(y), x);
}
进一步拆解
为了看到pipe函数的实际作用,进一步将上述函数进行拆解,用最简单的语法表示,以更清楚窥探其内部原理
function pipe(x, ...fns){
let total = x;
for(let f in fns){
total = f(total)
}
return total;
}
示例
当我们调用
pipe(x, f1, f2)
时,返回f2(f1(x))代码示例
const pipe = (...fns) => x => fns.reduce((y, f) => f(y), x); const f1 = x => {
return x+1;
} const f2 = x => {
return 2 * x;
} // (1+1)*2 = 4
let result = pipe(f1, f2)(1);
console.log(result);
JavaScript中pipe实战的更多相关文章
- JavaScript中的数据结构及实战系列
本系列主要是讲解JavaScript中的数据结构及在实际项目中遇到的地方 JavaScript中的数据结构及实战系列(1):队列 JavaScript中的数据结构及实战系列(2):栈
- 让你分分钟学会Javascript中的闭包
Javascript中的闭包 前面的话: 闭包,是 javascript 中重要的一个概念,对于初学者来讲,闭包是一个特别抽象的概念,特别是ECMA规范给的定义,如果没有实战经验,你很难从定义去理解它 ...
- Javascript中的闭包(转载)
前面的话: 闭包,是 javascript 中重要的一个概念,对于初学者来讲,闭包是一个特别抽象的概念,特别是ECMA规范给的定义,如果没有实战经验,你很难从定义去理解它.下面是作者从作用域链慢慢讲到 ...
- JavaScript中的原型和原型链
1.原型是什么?原型链是什么? 原型是一个prototype对象,用于表示类型之间的关系: 原型链指的是在JavaScript中对象之间的继承是通过prototype对象指向父类对象,直到指向Obje ...
- (译)JavaScript 中的正则表达式(RegEx)实操——快速掌握正则表达式,伴有随手可练的例子————(翻译未完待续)
(原文:https://blog.bitsrc.io/a-beginners-guide-to-regular-expressions-regex-in-javascript-9c58feb27eb4 ...
- 狗日的Javascript中的闭包
前面的话: 闭包,是 javascript 中重要的一个概念,对于初学者来讲,闭包是一个特别抽象的概念,特别是ECMA规范给的定义,如果没有实战经验,你很难从定义去理解它.下面是作者从作用域链慢慢讲到 ...
- 一篇文章把你带入到JavaScript中的闭包与高级函数
在JavaScript中,函数是一等公民.JavaScript是一门面向对象的编程语言,但是同时也有很多函数式编程的特性,如Lambda表达式,闭包,高阶函数等,函数式编程时一种编程范式. funct ...
- JavaScript中的原型、原型链、原型模式
今天,咱来聊聊JavaScript中的原型跟原型链 原型跟原型模式 这一块的知识,主要是设计模式方面的. 首先,我们知道JavaScript是面向对象的.既然是面向对象,那它自然也有相应的类跟对象等概 ...
- javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈
Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...
随机推荐
- PHP is_int() 、is_integer()、is_long() 函数
is_int() 函数用于检测变量是否是整数.高佣联盟 www.cgewang.com 注意: 若想测试一个变量是否是数字或数字字符串(如表单输入,它们通常为字符串),必须使用 is_numeric( ...
- Typora + PicGo-Core + Custom Command 实现上传图片到图床
教程参考 Typora+PicGo-Core(command line)+Gitee实现图片上传到图床 主要借鉴 picgo 操作命令 Typora + PicGo + Gitee 实现图片自动上传到 ...
- intel:spectre&Meltdown侧信道攻击(二)
上面一篇介绍了spectre&meltdown基本原理和简单的demo方案,今天继续学习一下该漏洞发现团队原始的POC:https://spectreattack.com/spectre.pd ...
- 基于asp.net core 从零搭建自己的业务框架(二)
前言 对于项目的迭代,如何降低复杂性的要求高于性能以及技术细节的 一个易用的项目,才能迭代到比拼性能,最后拼刺刀的阶段 传统单体项目,都是传统三层,直接请求响应的模式,这类称为Rpc模式,易用性上非常 ...
- Linux进程间通信之《共享内存》入门
目录 简述 代码 写端代码 读取端代码 编译 运行 简述 共享内存是Linux系统进程间通信常用的方式,通常用于数据量较大的情况,如果只是用于不同的进程间消息通知,那不如用消息队列或者socket.之 ...
- Elasticsearch从入门到放弃:瞎说Mapping
前面我们聊了 Elasticsearch 的索引.搜索和分词器,今天再来聊另一个基础内容-- Mapping. Mapping 在 Elasticsearch 中的地位相当于关系型数据库中的 sche ...
- 15、Facade 外观模式
什么是Facade模式 随着系统越来越复杂,我们需要把细节隐藏起来,给客户端提供一个统一的接口.在这种需求下facade模式诞生了.该模式比较简单,我们只需要在系统变得复杂把它运用上来,这样底层跟客户 ...
- Kibana配置nginx反代并本地ca加密nginx
简介 我们部署完ELK Stack后,虽然可以直接浏览器访问kibana进行访问,但这样对一些重要数据来说是不安全的,可以利用密码验证设置权限访问,在Kibana所在的服务器上安装Nginx服务,利用 ...
- Web For Pentester 学习笔记 - XSS篇
XSS学习还是比较抽象,主要最近授权测的某基金里OA的XSS真的实在是太多了,感觉都可以做一个大合集了,加上最近看到大佬的博客,所以这里我也写一个简单的小靶场手册,顺带着也帮助自己把所有XSS的方式给 ...
- 2020-07-13:es是去查id再根据id去查数据库这种方式好,还是所有数据都放es,直接去查es好?
福哥答案2020-07-13: 有人觉得第一种方法好,也有人觉得第二种方法好.如果搜索字段远小于显示字段,比如搜索字段为3个,显示字段有20个,这个时候用第一种方法好.es+hbase,一般这样搭配. ...