Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【深入理解JS核心技术】15. 什么是柯里化函数

【深入理解JS核心技术】15. 什么是柯里化函数

作者头像
达达前端
发布于 2022-05-15 01:43:36
发布于 2022-05-15 01:43:36
48900
代码可运行
举报
文章被收录于专栏:达达前端达达前端
运行总次数:0
代码可运行

柯里化是将具有多个参数的函数转换为一系列函数的过程,每个函数只有一个参数。Currying 以数学家Haskell Curry的名字命名。通过应用柯里化,n 元函数将其转换为一元函数。

让我们举一个 n 元函数的例子,以及它是如何变成柯里化函数的,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const multiArgFunction = (a, b, c) => a + b + c;
console.log(multiArgFunction(1, 2, 3)); // 6

const curryUnaryFunction = (a) => (b) => (c) => a + b + c;
curryUnaryFunction(1); // returns a function: b => c =>  1 + b + c
curryUnaryFunction(1)(2); // returns a function: c => 3 + c
curryUnaryFunction(1)(2)(3); // returns the number 6
复制代码

Curried 函数对于提高代码的可重用性和函数组合非常有用。

函数声明与函数表达式

JavaScript引擎在任何代码执行之前,会先读取函数声明,并在执行上下文中生成函数定义。而函数表达式必须等到代码执行到它那一行,才会在执行上下文中生成函数定义。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 没问题
console.log(sum(10, 10));
function sum(num1, num2) {
 return num1 + num2;
}
复制代码

代码可以正常运行,因为函数声明会在任何代码执行之前先被读取并添加到执行上下文。这个过程叫作函数声明提升。

在执行代码时,JavaScript引擎会先执行一遍扫描,把发现的函数声明提升到源代码树的顶部。因此即使函数定义出现在调用它们的代码之后,引擎也会把函数声明提升到顶部。

改为函数表达式就回出错:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 会出错
console.log(sum(10, 10));
let sum = function(num1, num2) {
 return num1 + num2;
};
复制代码

函数作为值

因为函数名在ECMAScript中就是变量,所以函数可以用在任何可以使用变量的地方。这意味着不仅可以把函数作为参数传给另一个函数,而且还可以在一个函数中返回另一个函数。

函数表达式

定义函数有两种方式:函数声明和函数表达式。

函数声明:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function functionName(arg0, arg1, arg2) {
 // 函数体
}
复制代码

函数声明的关键特点是函数声明提升,即函数声明会在代码执行之前获得定义。这意味着函数声明可以出现在调用它的代码之后:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sayHi();
function sayHi() {
 console.log('Hi!');
}
复制代码

因为 JavaScript 引擎会先读取函数声明,然后再执行代码。

第二种创建函数的方式就是函数表达式。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let functionName = function(arg0, arg1, arg2) {
 // 函数体
}
复制代码

函数表达式看起来就像一个普通的变量定义和赋值,即创建一个函数再把它赋值给一个变量functionName。

这样创建的函数叫作匿名函数(anonymous funtion),因为 function 关键字后面没有标识符。(匿名函数有也时候也被称为兰姆达函数)。

任何时候,只要函数被当作值来使用,它就是一个函数表达式。

未完结!更多内容尽情期待下一节~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
从零开始的异世界生信学习 linux部分 linux 基础---学习笔记-2
常见参数:-A ## 打印所有内容,包括特殊字符,如制表符; -n ##答应所有出行号,-b 参数 仅打印出非空白行行号
用户10361520
2023/02/16
5830
linux day2:文本查看、操作、统计命令
-n:按照数值从小到大进行排序 -V:字符串中含有数值时,按照数值从小到大排序 -r:逆向排序
不会写代码的医学生
2024/03/19
1350
Linux_文件查看、操作、统计命令
Linux_文件查看、操作、统计命令 文件的6种看法 (1)head :查看文件头10行 (2)tail:查看文件末尾10行 head / tail -n :查看文件的前/后 n 行,默认 10 行 例如:head -n 2 Data/example.fq (3)cat:查看文本文件的内容,将文件所有内容输出到屏幕 常见参数 -A ## 打印所有内容,包括特殊字符,如制表符 -n ## 打印出所有行号,-b 参数仅打印非空白行行号 常见用法: cat #输入 cat > file1 #重定向,往fi
大胖橘
2023/03/25
1.8K0
Linux 零基础入门 DAY12
青柠味
2025/05/28
590
Linux 零基础入门 DAY12
Linux基础 Day2
常见用法:1. paste file1 file2 2. seq 20 | paste - -
用户11008504
2024/06/01
1370
Linux基础 03 文件查看、操作、统计命令
世界上最遥远的距离就是我在空格前,你在空格后呜呜呜呜~今天学习比较琐碎的文件查看、操作、统计的命令,一共11个!常记常新!
可乐同学与生信死磕到底
2024/04/16
2950
文本操作系列命令
-d '\t' 指定分隔符 默认制表符\t cat -A 显示为^I 正常显示的形式类似空格
用户8539083
2024/07/12
1770
Linux学习笔记-Day11-12
-options:选项,用来对命令进行控制,也可省略 #两种格式:-h, --help
用户11190095
2024/07/17
2110
生信马拉松 Day12 Linux-2笔记
碎碎念:今天马拉松入门课程已经结课了,而我才补课到12天,呜呼!原本觉得自己R学的很好想直接跳到转录组,没有linux的基础根本听不懂,还得一步一步慢慢来。直播课连上3小时已经很难坚持了,补课的时候没有互动更加难熬,唯一的好处是听不懂的地方可以反复拖回来看,只能用这个勉强安慰一下自己了(;′⌒`)
阿呆的月历
2024/02/04
1960
跟萌老师学linux的第一天
linux系统简介命令格式:命令+参数+文件修改命令行配色echo 'export PS1="\[\033]2;\h:\u \w\007\033[33;1m\]\u \033[35;1m\t\033[0m \[\033[36;1m\]\w\[\033[0m\]\n\[\e[32;1m\]$ \[\e[0m\]"' >> ~/.bashrcsource ~/.bashrc文件夹管理或路径有关的符号.当前目录..上一级目录~家目录/只有当/在路径最前端时才是根目录,其他位置的都是目录层级分隔符|管道符:前面
贝诺酯
2023/03/23
6850
Linux_2
more 逐页查看,空格翻页 回车换行 q退出 /搜索关键词(n查看下一个,N查看上一个)
用户10407118
2023/03/23
4050
linux基础
一、linux系统简介 》 图片 命令格式:命令+参数+文件 图片 举例 tar -zxvf Data.tar.gz 二、文件夹与文件管理命令 1.pwd:printworking dire
yurric
2023/03/13
8410
Linux-生信技能树
gff/gtf:9列,序列名字,注释来源,基因结构,起始位置,终止位置,碱基测序结果可信度,链的+向与-向,密码子偏移,其他属性
用户9966449
2023/02/16
2.1K0
常用简单命令_bash笔记2
感谢支持ayqy个人订阅号,每周义务推送1篇(only unique one)原创精品博文,话题包括但不限于前端、Node、Android、数学(WebGL)、语文(课外书读后感)、英语(文档翻译) 如果觉得弱水三千,一瓢太少,可以去 http://blog.ayqy.net 看个痛快
ayqy贾杰
2023/03/15
6500
常用简单命令_bash笔记2
Linux 命令 | 每日一学,文本处理之内容分割排序实践
描述:用来显示行中的指定部分,删除文件中指定字段,在文件的每一行中提取片断, 在每个文件 FILE 的各行中, 把提取的片断显示在标准输出。
全栈工程师修炼指南
2024/09/24
2490
Linux 命令 | 每日一学,文本处理之内容分割排序实践
3.文件查看及内容处理
功能:crt模式看文件浏览过滤 语法:more [-dlfpcsu] [-num] [+/pattern] [+linenum] [file ...] 用法: 需要按键操作浏览过程 空白键 (space):向下翻一页; Enter:向下翻一行; /字串:在这个显示的内容当中,向下搜寻字串这个关键字; f:快速翻页 q:退出more浏览 说明:more虽然可以浏览比cat更多的文件内容,但有缺点,不能往上翻页,只能往下翻页,直到结束。 4.less
py3study
2020/01/07
7550
生信人的自我修养:Linux 命令速查手册
精心整理了生物信息学中常用的 Linux 命令,很不容易。所有命令的用法都经本人亲自测试。掌握这些命令,是每一个生信人基本的自我修养。
简说基因
2020/12/14
7.6K0
Linux之文件管理及文本处理
文件管理不外乎文件或目录的创建、删除、查询、移动,有mkdir/rm/mv 文件查询是重点,用find来进行查询;find的参数丰富,也非常强大; 有时候,需要给文件创建一个别名,我们需要用到ln,使用这个别名和使用原文件是相同的效果; 2.1. 创建和删除 创建:mkdir 删除:rm 删除非空目录:rm -rf file目录 删除日志 rm *log (等价: $find ./ -name “*log” -exec rm {} ;) 移动:mv 复制:cp (复制目录:cp -r ) 查看当前目录下文件个数: $find ./ | wc -l 复制目录: $cp -r source_dir dest_dir 2.2. 目录切换 找到文件/目录位置:cd 切换到上一个工作目录: cd - 切换到home目录: cd or cd ~ 显示当前路径: pwd 更改当前工作路径为path: $cd path 2.3. 列出目录项 显示当前目录下的文件 ls 按时间排序,以列表的方式显示目录项 ls -lrt 以上这个命令用到的频率如此之高,以至于我们需要为它建立一个快捷命令方式: 在.bashrc 中设置命令别名: alias lsl='ls -lrt' alias lm='ls -al|more' 这样,使用lsl,就可以显示目录中的文件按照修改时间排序;以列表方式显示; 给每项文件前面增加一个id编号(看上去更加整洁): >ls | cat -n 1 a 2 a.out 3 app 4 b 5 bin 6 config 注:.bashrc 在/home/你的用户名/ 文件夹下,以隐藏文件的方式存储;可使用 ls -a 查看; 2.4. 查找目录及文件 find/locate 搜寻文件或目录: $find ./ -name "core*" | xargs file 查找目标文件夹中是否有obj文件: $find ./ -name '*.o' 递归当前目录及子目录删除所有.o文件: $find ./ -name "*.o" -exec rm {} \; find是实时查找,如果需要更快的查询,可试试locate;locate会为文件系统建立索引数据库,如果有文件更新,需要定期执行更新命令来更新索引库: $locate string 寻找包含有string的路径: $updatedb 与find不同,locate并不是实时查找。你需要更新数据库,以获得最新的文件索引信息。 2.5. 查看文件内容 查看文件:cat vi head tail more 显示时同时显示行号: $cat -n 按页显示列表内容: $ls -al | more 只看前10行: $head - 10 ** 显示文件第一行: $head -1 filename 显示文件倒数第五行: $tail -5 filename 查看两个文件间的差别: $diff file1 file2 动态显示文本最新信息: $tail -f crawler.log 2.6. 查找文件内容 使用egrep查询文件内容: egrep '03.1\/CO\/AE' TSF_STAT_111130.log.012 egrep 'A_LMCA777:C' TSF_STAT_111130.log.035 > co.out2 2.7. 文件与目录权限修改 改变文件的拥有者 chown 改变文件读、写、执行等属性 chmod 递归子目录修改: chown -R tuxapp source/ 增加脚本可执行权限: chmod a+x myscript 2.8. 给文件增加别名 创建符号链接/硬链接: ln cc ccAgain :硬连接;删除一个,将仍能找到; ln -s cc ccTo :符号链接(软链接);删除源,另一个无法使用;(后面一个ccTo 为新建的文件) 2.9. 管道和重定向 批处理命令连接执行,使用 | 串联: 使用分号 ; 前面成功,则执行后面一条,否则,不执行:&& 前面失败,则后一条执行: || ls /proc && echo suss! || echo failed. 能够提示命名是否执行成功or失败; 与上述相同效果的是: if ls /proc; then echo suss; else echo fail; fi 重定向: ls proc/*.c > list 2> &l 将标准输出和标准错误重定向
菲宇
2019/06/13
1.9K0
Linux||常用命令(三)
less -N SRR10502964.sam | cut -f 1,3 # 输出文件中的第一列和第三列
小汪Waud
2023/02/03
5650
Linux||常用命令(三)
linux文本处理工具及正则表达式
                   -c 或——complerment :取字符集的补集
yuezhimi
2020/09/30
5980
相关推荐
从零开始的异世界生信学习 linux部分 linux 基础---学习笔记-2
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验