博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
柯里化函数之Javascript
阅读量:4655 次
发布时间:2019-06-09

本文共 1113 字,大约阅读时间需要 3 分钟。

定义

依据定义来说,柯里化就是将一个接收“多个”參数的函数拆分成一个或者很多个接收“单一”參数的函数。定义看起来是比較抽象的。以下来举个样例:

代码

 
1
2
3
4
5
 
function concat(str1,str2){
return str1 + str2;
}
concat(
"forever",
"px")
// "foreverpx"

不难理解。上面的代码中定义了一个连接字符串的函数,返回连接两个传入參数的字符串。

如今我们再看看还有一种定义方式:

 
1
2
3
4
5
6
7
8
 
function concatCurry(str1){
return
function(str2){
return str1 + str2;
}
}
var concatOne = concatCurry(
"forever");
concatOne(
"px");
//foreverpx

上面的代码中。我们将一開始传入两个參数的函数改装成了一个(或者说是两个)仅仅接收一个參数的函数。

我们来创建一个将接受多个參数的函数柯里化的通用函数:

 
1
2
3
4
5
6
7
8
9
 
function curry(fn) {
var args = [].slice.call(
arguments,
1);
return
function() {
return fn.apply(
null, args.concat([].slice.call(
arguments,
0)));
}
}
var concatOne = curry(concat,
"forever");
concatOne(
"px");
//foreverpx

柯里化的过程利用了闭包,使得返回的函数也能获得第一次传入的參数。

首先将传入的第二个參数存入args变量中,然后返回一个函数,在返回的函数中,将第一次传入的參数与柯里化之后传入的參数拼接起来成一个数组,然后通过apply方法调用柯里化之前的函数(fn),这样就达到了柯里化的效果。

假设是三个參数的函数想要柯里化,则例如以下:

 
1
2
3
4
5
6
7
8
 
function concat(s1,s2,s3){
return s1+s2+s3;
}
var cur1 = curry(concat,
"forever");
var cur2 = curry(cur1,
"px");
cur2(
"-me");
//foreverpx-me

文章作者:foreverpx

文章原文链接:

转载于:https://www.cnblogs.com/mengfanrong/p/5200796.html

你可能感兴趣的文章
斗鱼爬虫,爬取颜值频道的主播图片和名字
查看>>
【Codeforces Round #439 (Div. 2) B】The Eternal Immortality
查看>>
【MemSQL Start[c]UP 3.0 - Round 1 B】 Lazy Security Guard
查看>>
【codeforces 499C】Crazy Town
查看>>
【Uva 12105】Bigger is Better
查看>>
【47.40%】【codeforces 743B】Chloe and the sequence
查看>>
jQuery实现 自动滚屏操作
查看>>
好用的jq复制插件clipboard.js
查看>>
linux共享库,以及/etc/ld.so.conf文件的应用【转】
查看>>
Python 爬虫(1)基础知识和简单爬虫
查看>>
[经验] Unity3D 里怎么制作天空盒(skybox)
查看>>
ViewPager和View组合 实现页面的切换
查看>>
使用PagerSlidingTabStrip实现顶部导航栏
查看>>
调用摄像头和相册
查看>>
jQuery.事件对象
查看>>
CSS之属相相关
查看>>
整理了一下自己买过的计算机书
查看>>
解决py2exe error: MSVCP90.dll: No such file or directory
查看>>
java RSA实现私钥签名、公钥验签、私钥加密数据、公钥解密数据
查看>>
Erlang 练习题
查看>>