js函数式编程
最近在看朴灵的《深入浅出nodejs》其中讲到函数式编程.理解记录下
- 高阶函数
比较常见,即将函数作为参数,或是将函数作为返回值得函数.
如ECMAScript5中提供的一些数组方法 forEach() map() reduce() reduceRight() filter() every() some()
- 偏函数
说实话看到书,我是第一次看到这个概念,虽然应该是看到过这种用法,好桑感....定义也比较拗口
指创建一个调用另外一个部分---参数或变量已经预知的函数---的函数的用法.直白说就是:通过闭包来创建预先填写好的某些参数的函数."可以通过这个来创建动态名称的函数,看起来应该很牛B,代码可读性也更好"
写个例子
var joinwords = function(first,sec){
return [first, sec].join(' ');
} function suffix(a){
return function(b){
return joinwords(b,a);
}
} var hello = suffix("world");
/*
function hello (b){
return [b,"world"].join();
}
* */ console.log(hello("hello")); // hello world
----------------------------------------2014-02-11更新-----------------------------------------------------------------------
看了篇文章,函数柯里化与偏应用,讲的挺好的,为加深印象,自己再整理理解下
柯里化(Currying)
柯里化是将一个多元函数分解为一系列嵌套调用的一元函数。分解后,你可以部分应用一个或多个参数。柯里化的过程不会向函数传递参数。
偏应用(Partial Application)
偏应用是为一个多元函数预先提供部分参数,从而在调用时可以省略这些参数。
现在将上面的示例柯里化
function rightmostCurry (binaryFn) {
return function (secondArg) {
return function (firstArg) {
return binaryFn(firstArg, secondArg);
};
};
}; //调用
var rightmostCurriedMap = rightmostCurry(joinwords),
squareAll = rightmostCurriedMap("world");
console.log(rightmostCurry(joinwords)("Chan")("Nancy")); // Nancy Chan
console.log(rightmostCurriedMap("July")("Hey")); // Hey July
console.log(squareAll("hello")); // hello world
console.log(squareAll("hello2")); // hello2 world
When to use Currying(这篇文章讲到了,看得有点懵...)
When you find yourself calling the same function and passing mostly the same parameters, then the function is probably a good candidate for currying. You can create a new function dynamically by partially applying a set of arguments to your function. The new function will keep the repeated parameters stored (so you don't have to pass them every time) and will use them to pre-fill the full list of arguments that the original function expects.
js函数式编程的更多相关文章
- js函数式编程术语总结 - 持续更新
参考文档1 参考文档2 函数式编程术语 高阶函数 Higher-Order Functions 以函数为参数的函数 返回一个函数的函数 函数的元 Arity 比如,一个带有两个参数的函数被称为二元函数 ...
- js函数式编程——蹦床函数
概述 这是我在学习函数式编程的时候,关于递归,尾递归,相互递归和蹦床函数的一些心得,记下来供以后开发时参考,相信对其他人也有用. 参考资料:JavaScript玩转Clojure大法之 - Tramp ...
- js函数式编程(二)-柯里化
这节开始讲的例子都使用简单的TS来写,尽量做到和es6差别不大,正文如下 我们在编程中必然需要用到一些变量存储数据,供今后其他地方调用.而函数式编程有一个要领就是最好不要依赖外部变量(当然允许通过参数 ...
- js函数式编程(一)-纯函数
我将写的第一个主题是js的函数式编程,这一系列都是mostly adequate guide这本书的读书总结.原书在gitbook上,有中文版.由于原作者性格活泼,书中夹杂很多俚语,并且行文洒脱.中文 ...
- JS函数式编程 - 概念
最近在看Typescript,顺便看了一些函数式编程,然后半个国庆假期就没有了.做个笔记,分几个部分写吧. 最开始接触函数式编程的时候,第一个接触的概念就是高阶函数,和柯里化.咋一看,这不就是长期用来 ...
- JS函数式编程【译】2.1 函数式编程语言
- JS函数式编程【译】2.2 与函数共舞
- JS函数式编程【译】2.3 函数式程序员的工具集
- JS函数式编程【译】第二章总结
随机推荐
- ajax for in eval()知识点的应用
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- smaller programs should improve performance
COMPUTER ORGANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION In this section, we l ...
- SSH 登录VPS解决 The directory media/wysiwyg is not writable by server.问题
权限问题,去到 Magent根目录的Media文件夹,执行下面代码授权. chmod 777 wysiwyg
- 使用 HTML5 input 类型提升移动端输入体验
在过去的几年里,在移动设备上浏览网页已变得难以置信的受欢迎. 但是这些设备上的浏览体验,有时遗留很多的有待改进.当涉及到填写表单时,这一点尤为明显.幸运的是,HTML5规范引入了许多新input类型, ...
- keepalived工作原理和配置说明 腾讯云VPC内通过keepalived搭建高可用主备集群
keepalived工作原理和配置说明 腾讯云VPC内通过keepalived搭建高可用主备集群 内网路由都用mac地址 一个mac地址绑定多个ip一个网卡只能一个mac地址,而且mac地址无法改,但 ...
- Elasticsearch 配置
Elasticsearch 配置 Elasticsearch不仅仅是Lucene和全文搜索,我们还能这样去描述它: 分布式的实时文件存储,每个字段都被索引并可被搜索 分布式的实时分析搜索引擎 可以扩展 ...
- Velocity模板引擎语法
Velocity 模板引擎介绍 Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由java ...
- 通过SSIS监控远程服务器Windows服务并发送邮件报警!
利用SSIS不仅可以做BI项目的ETL,而且还可以做一些系统监控和维护工作,由于之前供应商写的Windows服务是读取ESB的消息进行处理,且通过OA流程与访客系统进行了集成,无论是ESB出现状况,还 ...
- Coursera台大机器学习基础课程学习笔记2 -- 机器学习的分类
总体思路: 各种类型的机器学习分类 按照输出空间类型分Y 按照数据标记类型分yn 按照不同目标函数类型分f 按照不同的输入空间类型分X 按照输出空间类型Y,可以分为二元分类,多元分类,回归分析以及结构 ...
- viewpaper 抽屉
引用:http://www.apkbus.com/android-18384-1-1.html 在为ViewFlipper视图切换增加动画和Android中实现视图随手势移动中实现了视图随手势切换,现 ...