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函数式编程【译】第二章总结
随机推荐
- nginx https ssl 设置受信任证书[原创]
1. 安装nginx 支持ssl模块 http://nginx.org/en/docs/configure.html yum -y install openssh openssh-devel (htt ...
- HTML问题集锦及笔记
1.<html>和<body>之间的输出? 加入<p>or<script>均可正常运行 2.<br />换行,用<br>< ...
- Mysql新建表,插入中文时报错“Incorrect string value: '\xE4\xBD\xA0\xE5\xA5\xBD' for column”问题
有时候我们在往数据库中输入信息时,如果输入的内容是中文,会报错“Incorrect string value: '\xE4\xBD\xA0\xE5\xA5\xBD' for column”. 例如: ...
- 【C51】UART串口通信
我们常需要单片机和其他模块进行通信,数据传输,常用的方式就是串口通信技术. 常用来 单片机<-->电脑, 单片机<-->单片机之间通信. 串行通信 versus 并行通信 并 ...
- zepto源码--核心方法3(属性相关)--学习笔记
继续$.fn方法 今天主要介绍几个跟属性操作相关的方法attr, removeAttr, prop, data attr 读取或设置dom的属性.如果没有给定value参数,则读取对象集合中第一个元素 ...
- NumberPicker设置宽度,设置文字颜色
修改宽度 wheel = (NumberPicker) findViewById(R.id.info_wheel_province); wheel.setLayoutParams(new Linear ...
- c# 对于批量表的统一查询 WM_CONCAT行列转换行数
//需要显示的列 sql = string.Format(@" SELECT WM_ ...
- Java 使用jaxp删除节点
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <perso ...
- JQuery实现click事件绑定与触发方法分析
原生JS通过什么方法绑定click事件? 原生js有一下三种方法为DOM对象绑定click事件, 第一种,在html中添加 onclick属性,在此属性中添加要绑定的事件函数,如下, 这种方法为htm ...
- luagd介绍
luagd 官网: http://ittner.github.io/lua-gd/ 下载 http://files.luaforge.net/releases/lua-gd/lua-gd/lua-gd ...