最近在看朴灵的《深入浅出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函数式编程的更多相关文章

  1. js函数式编程术语总结 - 持续更新

    参考文档1 参考文档2 函数式编程术语 高阶函数 Higher-Order Functions 以函数为参数的函数 返回一个函数的函数 函数的元 Arity 比如,一个带有两个参数的函数被称为二元函数 ...

  2. js函数式编程——蹦床函数

    概述 这是我在学习函数式编程的时候,关于递归,尾递归,相互递归和蹦床函数的一些心得,记下来供以后开发时参考,相信对其他人也有用. 参考资料:JavaScript玩转Clojure大法之 - Tramp ...

  3. js函数式编程(二)-柯里化

    这节开始讲的例子都使用简单的TS来写,尽量做到和es6差别不大,正文如下 我们在编程中必然需要用到一些变量存储数据,供今后其他地方调用.而函数式编程有一个要领就是最好不要依赖外部变量(当然允许通过参数 ...

  4. js函数式编程(一)-纯函数

    我将写的第一个主题是js的函数式编程,这一系列都是mostly adequate guide这本书的读书总结.原书在gitbook上,有中文版.由于原作者性格活泼,书中夹杂很多俚语,并且行文洒脱.中文 ...

  5. JS函数式编程 - 概念

    最近在看Typescript,顺便看了一些函数式编程,然后半个国庆假期就没有了.做个笔记,分几个部分写吧. 最开始接触函数式编程的时候,第一个接触的概念就是高阶函数,和柯里化.咋一看,这不就是长期用来 ...

  6. JS函数式编程【译】2.1 函数式编程语言

  7. JS函数式编程【译】2.2 与函数共舞

  8. JS函数式编程【译】2.3 函数式程序员的工具集

  9. JS函数式编程【译】第二章总结

随机推荐

  1. 为Docker容器指定自定义网段的固定IP/静态IP地址

    第一步:创建自定义网络 备注:这里选取了172.172.0.0网段,也可以指定其他任意空闲的网段 docker network create --subnet=172.172.0.0/16 docke ...

  2. Redis和Memcache对比及选择(转载)

  3. Masonry学习分享

    不完整目录 •UIScrollView 应用Masonry的正确用法 •tableHeaderView使用Masonry •同向文字显示优先级 1.基础篇 1.1基础使用 1.1.1运行效果 1.1. ...

  4. nodejs 初入

    nodejs 模块路径 1.内置模块 如果传递给require函数的是NodeJS内置模块名称,不做路径解析,直接返回内部模块的导出对象,例:require('http'). 2. nodejs  支 ...

  5. jquery on()方法绑定多个选择器,多个事件

    on(events,[selector],[data],fn) •events:一个或多个用空格分隔的事件类型和可选的命名空间,如"click"或"keydown.myP ...

  6. webService 发送soap请求,并解析返回的soap报文

    本例应用场景:要做一个webService测试功能,不局限于任何一种固定格式的webService,所以像axis,cxf等框架就不好用了.只有深入到webService的原理,通过发收soap报文, ...

  7. HTML5革命即将爆发

    近日,关于"HTML5生态重建冷思考"成为了很多人热烈讨论的话题.在网页制作市场上面,HTML5技术成为了颇为关注的焦点,在行业和社会各界引起了广泛的关注.HTML5网页制作也创造 ...

  8. 由SecureCRT引发的思考和学习

    由SecureCRT引发的思考和学习 http://mp.weixin.qq.com/s?__biz=MzAxOTAzMDEwMA==&mid=2652500597&idx=1& ...

  9. Elasticsearch + logstash中文指南

    http://kibana.logstash.es/content/logstash/examples/nginx-access.html http://es.xiaoleilu.com/030_Da ...

  10. windows2003服务器mysql每天定时备份

    1.php利用mysqldump备份数据库,代码如下: <?php /** * 数据库备份 */ $sqlname = $argv[1]; //接受bat或cmd传过来的第一个参数 要备份的数据 ...