自我介绍:大家好,我是吉帅振的网络日志;微信公众号:吉帅振的网络日志;前端开发工程师,工作4年,去过上海、北京,经历创业公司,进过大厂,现在郑州敲代码。

JS函数专栏

1【JS函数】JS函数之普通、构造、闭包函数

2【JS函数】JS函数之定时器函数

3【JS函数】JS函数之防抖、节流函数

4【JS函数】JS函数之排序函数,对象数组根据某属性排序

5【JS函数】JS函数之高阶函数、组合函数、函数柯里化​​​​​​​

一、高阶函数

1.定义

接收一个或多个函数作为参数,比如filter函数;返回一个函数,比如bind函数。

2.应用

举个例子:比如我们要筛数组[1,2,3,4,5]中大于3的所有元素

//1.普通函数
let newArr = [];
for(let i = 0,len = arr.length; i < len; i++){arr[i] > 3 && newArr.push(arr[i])
}//2.使用数组filter方法
let newArr = arr.filter((item) => {return item > 3})//3.自定义高阶函数
Array.prototype.myFilter = function (fn){let newArr = [];for(let i = 0,len = this.length; i < len; i++){fn(this[i]) && newArr.push(this[i])}return newArr;
}
[1,2,3,4,5].myFilter((item) => { return item > 3})

二、组合函数

1.定义

组合函数类似于管道,多个函数的执行时,上一个函数的返回值会自动传入到第二个参数继续执行。

2.应用

举个例子:比如我们要替换一个url中的参数

//1.嵌套方法
function replaceToken(str){return str.replace(/{token}/g,'123455')
}
function replaceAccount(str){return str.replace(/{account}/g,'xuriliang')
}
replaceAccount(replaceToken('http://localhost/api/login?token={token}&account={account}'))//2.组合函数
function compose() {var args = arguments;var start = args.length - 1;return function() {var i = start;var result = args[start].apply(this, arguments);while (i--) result = args[i].call(this, result);return result;}
}
compose(replaceToken,replaceAccount)('http://localhost/api/login?token={token}&account={account}')

二、函数柯里化

1.定义

柯里化是将一个多参数的函数转换成多个单参数的函数,这个函数会返回一个函数去处理下一个参数。也就是把fn(a,b,c)转换为newFn(a)(b)(c)这种形象。

2.应用

举个例子:比如我们要拼接接口地址的函数

//1.普通实现
function getUrl(service,context,api){return service + context + api;
}
let loginUrl = getUrl('http://localhost:8080/','auth','/login')
let logoutUrl = getUrl('http://localhost:8080/','auth','/logout')//2.函数柯里化
function curry(fn){let args = Array.prototype.slice.call(arguments,1);    return function(){let innerArgs = Array.prototype.slice.call(arguments);let finalArgs = args.concat(innerArgs);if(finalArgs.length < fn.length){         //fn.length为函数的参数个数return curry.call(this,fn,...finalArgs)}else{return fn.apply(null,finalArgs)}}
}
var getAuthUrl = curry(getUrl,'http://localhost:8080/','auth');
let loginUrl = getAuthUrl('/login')
let logoutUrl = getAuthUrl('/logout')

【JS函数】JS函数之高阶函数、组合函数、函数柯里化相关推荐

  1. js 高阶函数之柯里化

    博客地址:https://ainyi.com/74 定义 在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且 ...

  2. JS函数curry(柯里化)

    原文地址:http://blog.jobbole.com/77956/ 什么是柯里化? 柯里化是这样的一个转换过程,把接受多个参数的函数变换成接受一个单一参数(译注:最初函数的第一个参数)的函数,如果 ...

  3. 浅析 JavaScript 中的 函数 uncurrying 反柯里化

    柯里化 柯里化又称部分求值,其含义是给函数分步传递参数,每次传递参数后部分应用参数,并返回一个更具体的函数接受剩下的参数,这中间可嵌套多层这样的接受部分参数函数,直至返回最后结果. 因此柯里化的过程是 ...

  4. 一文讲懂什么是函数柯里化,柯里化的目的及其代码实现

    柯里化(Currying) 柯里化(Currying)[1]是一种关于函数的高阶技术.它不仅被用于 JavaScript,还被用于其他编程语言. 柯里化是一种函数的转换,它是指将一个函数从可调用的 f ...

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

    柯里化(Currying) 柯里化(Currying)是一种关于函数的高阶技术.它不仅被用于 JavaScript,还被用于其他编程语言. 柯里化是一种函数的转换,它是指将一个函数从可调用的 f(a, ...

  6. 函数式编程 -- 纯函数、柯里化函数

    文章内容输出来源:拉勾教育 大前端高薪训练营 前言 学习函数式编程,要知道什么是纯函数,使用纯函数的好处,了解有关副作用的相关信息,以及纯函数相关的功能库Lodash,还有什么是函数的柯里化. 一.纯 ...

  7. 纯函数、柯里化、组合函数的解析以及代码实现

    文章目录 一.纯函数的概念和理解 二.JavaScript柯里化 1.柯里化的理解 2.将函数柯里化的代码实现 三.组合函数 1.组合函数的理解 2.通用的组合函数的实现 一.纯函数的概念和理解 纯函 ...

  8. 实现一个通用的函数柯里化的函数

    本文目的 这篇文章会一步一步带你实现一个通用的函数柯里化的函数,即使你完全不懂柯里化这个概念也没关系,我会先介绍柯里化函数的概念,然后以实现一个完整的判断变量类型的函数的例子来让你直观体验函数柯里化, ...

  9. JavaScript函数柯里化

    一.简单了解apply和call call 和 apply 都是为了改变某个函数运行时的 context 即上下文而存在的,换句话说,就是为了改变函数体内部 this 的指向. call 和 appl ...

  10. JavaScript函数式编程(纯函数、柯里化以及组合函数)

    JavaScript函数式编程(纯函数.柯里化以及组合函数) 目录 JavaScript函数式编程(纯函数.柯里化以及组合函数) 前言 1.纯函数 1.1.纯函数的概念 1.2.副作用 1.3.纯函数 ...

最新文章

  1. “无路之门”,一款VR恐怖冒险游戏
  2. Tensorflow安装及过程中遇到的一些些问题
  3. IT人的十八般武艺-序言
  4. 你懂change buffer吗
  5. SystemTray.cpp
  6. HIVE json格式数据的处理
  7. NVMe的Linux内核驱动分析
  8. Python学习_100Days
  9. 用MATLAB仿真AM调制
  10. 如何清除计算机搜索框内的搜索历史记录,如何清除搜索框中的网站访问历史记录...
  11. 【网页特效】12 个炫酷背景特效库
  12. ​stp文件转wrl
  13. 交换机的三种端口类型
  14. ubuntu 10.10离线升级到11.04
  15. 百度云解决迅雷一直寻找资源无法开始下载的问题
  16. kafka系列(3)- kafka的安装
  17. Python入门01:如何在 Chrome 浏览器轻松抓包
  18. Rule base configuration
  19. Inductive Representation Learning In Temporal Networks via Causal Anonymous Walks
  20. 我喜欢玩计算机游戏译成英语,50字英语作文带翻译-我喜欢玩游戏

热门文章

  1. iOS和Android的区别
  2. 淘宝私域运营如何操作?
  3. 基于Dedup的数据打包技术
  4. Java实现批阅奏章问题
  5. 用模拟器在电脑上玩王者荣耀手游最流畅教程
  6. tp查询某个字段的值是否存在
  7. Vue 中v-model的完整用法(v-model的实现原理)
  8. Java毕设项目在线交友系统2021计算机(附源码+系统+数据库+LW)
  9. 天涯明月刀怎么导入php捏脸数据,天涯明月刀捏脸数据怎么导入,让你轻松学会导入捏脸...
  10. 1024共创程序世界