[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"> //继承第一种方式 ...
随机推荐
- android - 调试
在android总调试程序,不同于普通的java程序,我们可以通过'Windows->Show View->Other->LogCat"打开'LogCat'工具,选择下拉选 ...
- Xcode7新特性
更新Xcode7之后报错: Assertion failure in -[UIApplication _runWithMainScene:transitionContext:completion:], ...
- 使用第三方SDK出现: duplicate symbol _llvm.cmdline in:
如果是同一个静态库中的文件链接的时候有冲突,可能是这个静态库不支持模拟器,真机运行就好了. 或者可以使用xcode7的虚拟机跑也是没问题的. duplicate symbol _llvm.cmdlin ...
- 键盘数字对应的ASCII码(keycode码)
keycode 1 = 鼠标左键keycode 2 = 鼠标右键keycode 3 = Cancelkeycode 4 = 鼠标中键keycode 8 = BackSpace keycode 9 = ...
- MapReduce中的排序
hadoop的计算模型就是map/reduce,每一个计算任务会被分割成很多互不依赖的map/reduce计算单元,将所有的计算单元执行完毕后整个计算任务就完成了.因为计算单元之间互不依 ...
- Linux CentOS6.4下Mysql数据库的安装与配置
一.mysql简介 说到数据库,我们大多想到的是关系型数据库,比如mysql.oracle.sqlserver等等,这些数据库软件在windows上安装都非常的方便,在Linux上如果要安装数据库,咱 ...
- 分享Git的一些个人配置
先贴上自己.gitconfig的相关命令,我再具体说一下 diff.external=~/.git-meld.sh http.sslverify=false http.proxy=http://127 ...
- js关于DOM和BOM
关于BOM和DOM BOM 下面一幅图很好的说明了BOM和DOM的关系 BOM提供了一些访问窗口对象的一些方法,我们可以用它来移动窗口位置,改变窗口大小,打开新窗口和关闭窗口,弹出对话框,进行导航以及 ...
- Spring Cp30配置
1.配置db.properties <bean id= "propertyConfigurer" class="org.springframework.beans. ...
- BZOJ 1021 [SHOI2008]Debt 循环的债务
1021: [SHOI2008]Debt 循环的债务 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 694 Solved: 356[Submit][S ...