首页 > 编程语言 >javascript Pipe方法执行流

javascript Pipe方法执行流

时间:2023-12-20 10:13:59浏览次数:41  
标签:pipe name uppercase getName javascript Pipe Buckethead 执行 函数

pipe的概念很简单,就是将n个函数组合起来,他是一个从左到右的流,每个函数执行的时候都传入之前函数的结果。下面写一个返回一个人名字的函数:

getName = (person) => person.name;
getName({name: "Buckethead"})
// 返回 "Buckethead"

接下来写一个将字符串大写的函数

uppercase = (string) => string.toUpperCase();
uppercasse("Buckethead")
// 返回 "BUCKETHEAD"

所以为了获取大写的名字,接下来这样写:

name = getName({name: "Buckethead"})
uppercase(name);
// 返回 "BUCKETHEAD"

如果去掉name参数,就变成:

uppercase(getName({ name: 'Buckethead' }));

这样看起来还行,但是这样变得拥挤了,如果我们再加一个函数来获取字符串的前6个字符呢?,那么使用一个函数:

get6Characters = (string) => string.substring(0, 6);

get6Characters('Buckethead');
// 'Bucket'

将上面的函数组合再一起变成了:

get6Characters(uppercase(getName({ name: 'Buckethead' })));

// 'BUCKET';

那么如果再加一个反转字符串的函数:

reverse = (string) =>
string
  .split("")
  .reverse()
  .join("")

reverse("Buckethead")
// 'daehtekcuB'

这样的话就变成了:

reverse(get6Characters(uppercase(getName({ name: 'Buckethead' }))));
// 'TEKCUB'

接下来我们使用pipe进行拯救上面这一串函数调用。为了不创建一连串的中间参数,让我们将这一串函数pipe起来

pipe(
  getName,
  uppercase,
  get6Characters,
  reverse
  )({name: "Buckethead"})

看起来想todo列表。
接下来一步步解析pipe做了什么,作为demo,将使用Eric Elliott’s functional programming articles.的继承。

pipe = (...fns) => (x) => fns.reduce((v, f) => f(v), x)

使用...参数,可以pipe很多个函数,每个函数接收前一个函数的返回和他的所有reduced到一个值里面。就像下面这样:

pipe(
  getName,
  uppercase,
  get6Characters,
  reverse  
)({name: "Buckethead"})
// 'TEKCUB'

接下来展开pipe并且debugger这些表达式,一步一步的来看:

pipe = (...functions) => (value) => {
  debugger;

  return functions.reduce((currrentValue, currentFunction) => {
    debugger;
    return currentFunction(currentValue);
}, value);
}


使用示例中的方法来pipe,并且展开看参数:

检查本地变量。有4个函数参数,并且参数值是{name: "Buckethead"}。因为使用了变量参数,pipe允许很多的函数作为参数使用并且会一个个循环调用他们。

接下来的debugger中,将深入到reduce,currentValue将传递给currentFunction并且返回。
我们看到结果是Buckethead,因为当前函数currentFunction 是返回name函数,接下来这个函数会被返回并且去掉,意味着name
变成了一个新的currentValue,接下来继续debugger。


现在currentValue Buckethead因为这是再上一个函数中我们得到的返回。当前的currentFunctionuppercase,所以我们的到了BUCKETHEAD作为currentValue

同样的,获取BUCKETHEAD的前面6个字符串并且把他们交给下一个函数。

接下来调用反转字符的方法reverse

以上就是pipe执行的流程,总的来说就是将一串函数作为参数传入pipe方法里面,然后传递一个参数进去,然后pipe会将所有的参数函数依次执行,将上一步的返回结果传入到下一步之中。

标签:pipe,name,uppercase,getName,javascript,Pipe,Buckethead,执行,函数
From: https://www.cnblogs.com/xxss0903/p/17915806.html

相关文章

  • JavaScript中val()、html()、text()区别
    区别在前端开发中,val()、html()、text()三个方法都是用来获取或设置元素的内容。它们的区别在于:val()方法用于获取或设置表单元素的value属性的值。html()方法用于获取或设置元素的HTML内容,包括标签和文本。text()方法用于获取或设置元素的纯文本内容,不包括标签。事......
  • SQL 的执行顺序,你搞清楚了吗?
    这是一条标准的查询语句: 这是我们实际上SQL执行顺序:from子句组装来自不同数据源的数据;where子句基于指定的条件对记录行进行筛选;groupby子句将数据划分为多个分组;使用聚集函数进行计算;使用having子句筛选分组;计算所有的表达式;select的字段;使用orderby对结......
  • ax650使用ax-pipeline进行推理
    ax650使用ax-pipeline进行推理搭建交叉编译环境拉取ax-pipeline源码及子模块gitclone--recursivehttps://github.com/AXERA-TECH/ax-pipeline.git下载sdkcdax-pipeline./download_ax_bsp.shax650cdax650n_bsp_sdkwgethttps://github.com/ZHEQIUSHUI/assets/re......
  • jQuery与JavaScript与ajax三者的区别与联系
    简单总结:1、JS是一门前端语言。2、Ajax是一门技术,它提供了异步更新的机制,使用客户端与服务器间交换数据而非整个页面文档,实现页面的局部更新。3、jQuery是一个框架,它对JS进行了封装,使其更方便使用。jQuery使得JS与Ajax的使用更方便 关系比喻:若把js比作木头,那么jquery就是......
  • 什么是 JavaScript 闭包?
    什么是JavaScript闭包?在JavaScript中,闭包是指一个函数能够访问在它外部定义的变量。这些变量通常被称为“自由变量”,因为它们不是该函数的局部变量,也不是该函数的参数。闭包可以在函数内部创建,也可以在函数外部创建。JavaScript中的每个函数都是一个闭包,因为它们都能够访问......
  • JavaScript 文件优化指南
    本文将探讨实用的JavaScript文件优化技术、如何处理与JavaScript文件相关的性能问题以及帮助优化过程的工具。你将获得提升web应用程序速度的相关知识,从而为你的用户提供无缝体验。JavaScript文件是web应用程序的重要组成部分,但网站速度和用户体验对网站的成功至关重要。......
  • JavaScript 执行上下文
    一旦整个JavaScript程序运行,就会创建执行上下文。全局执行上下文已创建。它有两个组件,变量环境和变量。执行线程,它分两个阶段创建。第一阶段,是创建阶段。在创建阶段,我们为全局空间内的所有变量和函数分配内存。我们分配了一个未定义的变量。对于函数,我们实际上存储整个函数。这......
  • PowerDesigner SqlServer 表列描述脚本无法执行问题
    1.原脚本,sp_addextendedproperty的0级别类型写的是user,这个类型在高版本中已经删除,无法使用,应该切换成SCHEMA [ifexists(select1fromsys.extended_propertiespwherep.major_id=object_id('[%QUALIFIER%]%TABLE%')andp.minor_id=(selectc.column_idfrom......
  • MySQL-08.聚合函数和SQL(DQL)的执行流程
    C-08聚合(分组)函数和SQL(DQL)执行流程上一章,讲到了SQL单行函数。实际上SQL函数还有一类,叫做聚合函数,或者多行,分组函数,它是对一组数据进行汇总的函数,输入的是一组数据的集合,输出的是单个值。1.聚合函数的介绍什么是聚合函数聚合函数作用于一组数据,并对一组数据返回一个值。......
  • JavaScript 中 let、var 和 const 的区别及使用建议
    前言JavaScript中的let、var和const是三种不同的变量声明方式。虽然它们都可以用来声明变量,但它们之间有很大的区别。在本篇文章中,我们将深入探讨这三种变量声明方式的区别以及它们在实际开发中的应用。正文内容一、let的用法let是ES6中新增的变量声明方式,它的作用域......