没有合适的资源?快使用搜索试试~ 我知道了~
【JavaScript源代码】怎样用Javascript实现函数柯里化与反柯里化.docx
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 111 浏览量
2021-12-29
22:12:54
上传
评论
收藏 20KB DOCX 举报
温馨提示
试读
13页
怎样用Javascript实现函数柯里化与反柯里化 函数柯里化(黑人问号脸)???Currying(黑人问号脸)???妥妥的中式翻译既视感;下面来一起看看究竟什么是函数柯里化: 维基百科的解释是:把接收多个参数的函数变换成接收一个单一参数(最初函数的第一个参数)的函数,并返回接受剩余的参数而且返回结果的新函数的技术。其由数学家Haskell Brooks Curry提出,并以curry命名。 概念往往都是干涩且难懂的,让我们用人话来解释就是:如果我们不确定这个函数有多少个参数,我们可以先给它传入一个参数,然后通过JS闭包(如若不懂JS闭包,请先学习闭包知识点再来学习本篇博文https:
资源推荐
资源详情
资源评论
1
怎样用 Javascript 实现函数柯里化与反柯
里化
函数柯里化(黑人问号脸)???Currying(黑人问号
脸)???妥妥的中式翻译既视感;下面来一起看看究竟什
么是函数柯里化:
维基百科的解释是:把接收多个参数的函数变换成接收
一个单一参数(最初函数的第一个参数)的函数,并返回接
受剩余的参数而且返回结果的新函数的技术。其由数学家
Haskell Brooks Curry 提出,并以 curry 命名。
概念往往都是干涩且难懂的,让我们用人话来解释就是:
如果我们不确定这个函数有多少个参数,我们可以先给它传
入一个参数,然后通过 JS 闭包(如若不懂 JS 闭包,请先学
习 闭 包 知 识 点 再 来 学 习 本 篇 博 文
https://www.cnblogs.com/dengyao-blogs/p/11475575.ht
ml)来进行返回一个函数,内部函数接收除开第一个参数外
的其余参数进行操作并输出,这个就是函数的柯里化;
举个小例子:
场景(需求):
众所周知程序员每天加班的时间还是比较多的,如果我
们需要计算一个程序员每天的加班时间,那么我们的第一反
应应该是这样;
2
var overtime=0;
function time(x){
return overtime+=x;
}
time(1); //1
time(2); //3
time(3); //6
上面的代码固然没有问题,可是需要每天调用都算加一
下当天的时间,很麻烦,并且每调用一次函数都要进行一定
的操作,如果数据量巨大,有可能会有影响性能的风险,那
么有没有可以偷懒又能解决问题的办法呢?有的!
function time(x){
return function(y){
return x+y;
}
}
var times=time(0);
times(3);
但是上面代码依然存在问题,在实际开发中很多时候我
们的参数是不确定的,上面代码虽然简单的实现了柯里化的
3
基本操作,但是对于参数不确定的情况是处理不了的;所以
存在着函数参数的局限性;不过我们从上面的代码中基本可
以知道函数柯里化是个啥意思了;就是一个函数调用的时候
只允许传入一个参数,然后通过闭包返回内部函数去处理和
接收剩余参数,返回的函数通过闭包的方式记住了 time 的
第一个参数;
我们再来把代码改造一下:
// 首先定义一个变量接收函数
var overtime = (function() {
//定义一个数组用来接收参数
var args = [];
//这里运用闭包,调用外部函数返回一个内部函数
return function() {
//arguments 是浏览器内置对象,专门用来接收参
数
//如果参数的长度为 0 即没有参数的时候
if(arguments.length === 0) {
//定义变量用来累加
var time = 0;
//循环累加,用 i 和 args 的长度进行比较
for (var i = 0, l = args.length; i <
l; i++) {
剩余12页未读,继续阅读
资源评论
mmoo_python
- 粉丝: 0
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功