最近在看朴灵的《深入浅出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. nginx https ssl 设置受信任证书[原创]

    1. 安装nginx 支持ssl模块 http://nginx.org/en/docs/configure.html yum -y install openssh openssh-devel (htt ...

  2. HTML问题集锦及笔记

    1.<html>和<body>之间的输出? 加入<p>or<script>均可正常运行 2.<br />换行,用<br>< ...

  3. Mysql新建表,插入中文时报错“Incorrect string value: '\xE4\xBD\xA0\xE5\xA5\xBD' for column”问题

    有时候我们在往数据库中输入信息时,如果输入的内容是中文,会报错“Incorrect string value: '\xE4\xBD\xA0\xE5\xA5\xBD' for column”. 例如: ...

  4. 【C51】UART串口通信

    我们常需要单片机和其他模块进行通信,数据传输,常用的方式就是串口通信技术. 常用来 单片机<-->电脑,  单片机<-->单片机之间通信. 串行通信 versus 并行通信 并 ...

  5. zepto源码--核心方法3(属性相关)--学习笔记

    继续$.fn方法 今天主要介绍几个跟属性操作相关的方法attr, removeAttr, prop, data attr 读取或设置dom的属性.如果没有给定value参数,则读取对象集合中第一个元素 ...

  6. NumberPicker设置宽度,设置文字颜色

    修改宽度 wheel = (NumberPicker) findViewById(R.id.info_wheel_province); wheel.setLayoutParams(new Linear ...

  7. c# 对于批量表的统一查询 WM_CONCAT行列转换行数

    //需要显示的列                sql = string.Format(@"                                      SELECT  WM_ ...

  8. Java 使用jaxp删除节点

    <?xml version="1.0" encoding="UTF-8" standalone="no"?> <perso ...

  9. JQuery实现click事件绑定与触发方法分析

    原生JS通过什么方法绑定click事件? 原生js有一下三种方法为DOM对象绑定click事件, 第一种,在html中添加 onclick属性,在此属性中添加要绑定的事件函数,如下, 这种方法为htm ...

  10. luagd介绍

    luagd 官网: http://ittner.github.io/lua-gd/ 下载 http://files.luaforge.net/releases/lua-gd/lua-gd/lua-gd ...