| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> JavaScript知识库 -> 【JS基础整理—No.07】函数柯里化 -> 正文阅读 |
|
[JavaScript知识库]【JS基础整理—No.07】函数柯里化 |
目录 一、引入柯里化大多数同学初次遇到柯里化都是在这几道面试题当中。
二、柯里化的含义什么叫柯里化呢?
柯里化就是让一个函数变得更具体一些,就是使函数的作用效果变得更小。把一个函数传递多个参数完成的事情改变成一个函数传递一个参数的多个函数形式。 原则上返回的一个函数只能接收一个参数,但多个参数我们通常也叫柯里化。 【这里举个例子解释一下👇】
怎么就使函数更具体了呢? 上面呢只是一个栗子,使函数具体的过程就是函数柯里化的过程,这个过程就是对函数参数进行处理的过程。我们再来品味刚刚的官方解释,相信一下子就明白在表达什么。通俗理解:只传递给函数一部分参数来调用它,让它返回一个函数去处理剩下的参数。 为什么要柯里化呢? 可能你就会问,折腾了这么半天的目的是什么呢?感觉代码还变多了呢,本来可以一步到位的事情。之前我们在柯里化的概念中提到,柯里化是使函数变得更具体些,即作用范围更小,上面这一系列的操作不就是使函数更具体的过程。先返回一个函数,这样子我们就可以根据这个函数批量的生成一些判断类型的方法,这也就是柯里化的目的所在。(以前是判断所有类型,现在是判断一个类型)那么我们同样就知道了,反柯里化就是让函数的作用范围更大。 绕来绕去讲了这么多,对于柯里化现在一定不陌生了,上面这些无非就是在解释柯里化到底是什么。那么再首位呼应一下! 柯里化的官方解释:把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数。换种说法,把一个函数传递多个参数完成的事情改变成一个函数传递一个参数的多个函数形式。 三、柯里化函数实现一个通用的柯里化函数 原理:比较参数个数:根据 调用时传递的参数 和 函数的参数 做判断,如果一致就让函数执行,不一致就返回一个函数继续传参。 关键步骤:使用一个变量(args)来记录传入的所有参数;递归调用函数 Chailo👸🏾叨叨叨:可以直接跳到3,中间这部分是当时学习过程的记录,大家可以直接食用终极版本。但是我觉得从0到1的过程比结果更重要,对于一些问题也做了注释,理解起来会更轻松一些。 1.初步实现版本:(可以不看)
干啥啥不行,写bug第一名! 上面的看上去没什么毛病,但是当你这么👇调用就出问题了!
? 报错:isNumber is not a function,原因是'String''Number'都传入同一个args中。 2.优化版本:(可以不看)解决一下给curry函数使用args记录所有参数的过程
但是这个又有个小毛病,不能同时给curry函数传入fn和fn的参数,就是这么个意思👇
这个参数传递属实是给我搞懵,但经历这么一个过程已经把柯里化的实现过程给整的清清楚楚明明白白。 3.终极版本:最后介绍一个最容易理解最全面的版本,参数爱咋传咋传完全不受影响。
学到这部分对于柯里化已经有了一个大概的理解。那就解决一下一开始引入的问题吧! 四、柯里化面试题
五、柯里化使用场景
👆 我最喜欢这个,折腾半天俺就想知道俺到底可以用他来干嘛。 我的理解是一种编程思想,然后我们可以把它运用在实际的开发中解决一些问题或者提高效率。其实就是针对某个需求使用函数进行包装,使它可以处理这几种情况,给这个包装的过程就叫柯里化。 那柯里化到底是用来干嘛的呢? 1. 参数复用 ?????🌰:上文我们对判断数据类型函数,固定第一个参数'String'。 2. 函数复用 ? ? ?🌰:上文我们对判断数据类型函数,isString()可用于判断字符串类型。 3. 延迟执行(本质是对参数复用的改进) ? ? ?🌰: 👉传送门
|
|
JavaScript知识库 最新文章 |
ES6的相关知识点 |
react 函数式组件 & react其他一些总结 |
Vue基础超详细 |
前端JS也可以连点成线(Vue中运用 AntVG6) |
Vue事件处理的基本使用 |
Vue后台项目的记录 (一) |
前后端分离vue跨域,devServer配置proxy代理 |
TypeScript |
初识vuex |
vue项目安装包指令收集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 6:05:17- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |