[Javascript] What is JavaScript Function Currying?
Currying is a core concept of functional programming and a useful tool for any developer's toolbelt.
Example 1:
let f = a => b => c => a+b+c; let result = f(1)(2)(3);
console.log(result); //
Example 2:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JS Bin</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.18.0/ramda.min.js"></script>
</head>
<body>
<div id="one" style="width: 100px;height: 100px;border: 2px solid black">One</div>
<div id="two" style="width: 100px;height: 100px;border: 2px solid black">Two</div>
<div id="three" style="width: 100px;height: 100px;border: 2px solid black">Three</div>
</body>
</html>
let one = document.getElementById('one');
let tow = document.getElementById('two');
let three = document.getElementById('three');
let f = a => b => c => a.addEventListener(b, (event)=>{
event.target.style.background = c;
});
f(one)('click')('red');

Example 3:
let one = document.getElementById('one');
let tow = document.getElementById('two');
let three = document.getElementById('three');
let f = a => b => c => a.addEventListener(b, (event)=>{
event.target.style.background = c;
});
let oneClickEvent = f(one);
let twoClickEvent = f(two);
oneClickEvent('mouseover')('red');
twoClickEvent('mouseout')('blue');

Example 4: include ramda library:
let one = document.getElementById('one');
let tow = document.getElementById('two');
let three = document.getElementById('three');
let f = R.curry((a,b,c) =>{
a.addEventListener(b, (event)=>{
event.target.style.background = c;
});
});
// with placeholder from Ramda
const clickGreen = f(R.__, 'click', 'green');
clickGreen(one);
Example 5: multi placeholders:
let one = document.getElementById('one');
let tow = document.getElementById('two');
let three = document.getElementById('three');
let f = R.curry((a,b,c) =>{
a.addEventListener(b, (event)=>{
event.target.style.background = c;
});
});
// with placeholder from Ramda
const clickColor = f(R.__, 'click', R.__);
clickColor(one, 'yellow');
clickColor(two, 'grey');
clickColor(three, 'pink');

[Javascript] What is JavaScript Function Currying?的更多相关文章
- Function Currying in javascript 的一些注释
理解函数柯里化(Function Currying ),最关键的是理解下面这个函数: function curry(fn){ var args = Array.prototype.slice.call ...
- Javascript学习之函数(function)
在JS中,Function(函数)类型实际上是对象;每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法.由于函数是对象,因此函数名实际上也是一个指向函数对象的指针. 一 函 ...
- JavaScript自运行函数(function(){})()的理解
今天打开JQuery源文件(jquery-1.8.3), 看到JQuery的初始化过程是这样的 (function( window, undefined ) { // .... })( window ...
- javascript对象模型和function对象
javascript中,函数就是对象 <html> <head> <script type="text/javascript"> functio ...
- JavaScript高级篇之Function对象
JavaScript高级篇之Function对象 一: Function对象引入: Function对象是js的方法对象,可以用Function实例化出任何js方法对象. 例如: <%@ pag ...
- jsp中的javascript的$(document).ready( function() { $("#loginForm").validate()
转自:https://bbs.csdn.net/topics/392459787?list=71147533 下面是jsp页面中的JavaScript代码 $(document).ready( fun ...
- JavaScript权威设计--JavaScript函数(简要学习笔记十一)
1.函数调用的四种方式 第三种:构造函数调用 如果构造函数调用在圆括号内包含一组实参列表,先计算这些实参表达式,然后传入函数内.这和函数调用和方法调用是一致的.但如果构造函数没有形参,JavaScri ...
- JavaScript权威设计--JavaScript函数(简要学习笔记十)
1.函数命名规范 函数命名通常以动词为前缀的词组.通常第一个字符小写.当包含多个单词时,一种约定是将单词以下划线分割,就像"like_Zqz()". 还有一种就是"lik ...
- javascript笔记:javascript的关键所在---作用域链
javascript里的作用域是理解javascript语言的关键所在,正确使用作用域原理才能写出高效的javascript代码,很多javascript技巧也是围绕作用域进行的,今天我要总结一下关于 ...
- JavaScript学习13 JavaScript中的继承
JavaScript学习13 JavaScript中的继承 继承第一种方式:对象冒充 <script type="text/javascript"> //继承第一种方式 ...
随机推荐
- for update被锁定解锁
查找被锁定的表,用户,session:SELECT object_name, machine, s.sid, s.serial#FROM gv$locked_object l, dba_object ...
- [转]最详细的 HTTPS 科普扫盲帖
转载自http://www.codeceo.com/article/https-knowledge.html 为什么需要https HTTP是明文传输的,也就意味着,介于发送端.接收端中间的任意节点都 ...
- Character Encoding tomcat.
default character encoding of the request or response body: If a character encoding is not specified ...
- C# static 干货全解析
讲解顺序 背景 静态字段 静态函数 静态方法 疑问解答 背景 static来源 在编写类的时候,有时候需要类里面的某个成员具有唯一性,也就是,对所有的对象都保持只有一个的状态.比如创建个人信息,我们都 ...
- poj3278 BFS入门
M - 搜索 Crawling in process... Crawling failed Time Limit:2000MS Memory Limit:65536KB 64bit I ...
- PHP文件类型检查类-比较全的
在CSDN上淘来的一个文件类型的类,还不错,留下自己看! <? /** * 检证文件类型类 * * @author */ class FileTypeValidation { // 文件类型,不 ...
- IPv6套接字地址结构
IPv6套接字地址结构 struct in6_addr{ unit8_t sa_addr[16]; }; #define SIN6_LEN struct sockaddr_in6{ unit8_t s ...
- cf C. Inna and Dima
http://codeforces.com/contest/374/problem/C 记忆化搜索,题意:求按照要求可以记过名字多少次,如果次数为无穷大,输出Poor Inna!,如果不经过一次输出P ...
- 你以为PHP那么好自定义升级?
X,PHP如果只是安装操作系统之后,YUM INSTALL之后就可以使用最好啦. 但如果YUM安装的官方PHP版本太低怎么办? 据我所知,现在也只是到PHP5.3.3版本,如果APP应用需要PHP5. ...
- led驅動芯片對LED燈具的要求
1.LED驅動芯片直流額定輸入電壓范圍應當8 - 40 v,覆蓋廣泛的應用需求.最好的壓縮能力大于45 v.當輸入交流12 v.24 v,簡單的橋式整流器輸出電壓可以遵循電網電壓波動,特別是在高電壓輸 ...