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?的更多相关文章

  1. Function Currying in javascript 的一些注释

    理解函数柯里化(Function Currying ),最关键的是理解下面这个函数: function curry(fn){ var args = Array.prototype.slice.call ...

  2. Javascript学习之函数(function)

    在JS中,Function(函数)类型实际上是对象;每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法.由于函数是对象,因此函数名实际上也是一个指向函数对象的指针. 一 函 ...

  3. JavaScript自运行函数(function(){})()的理解

    今天打开JQuery源文件(jquery-1.8.3), 看到JQuery的初始化过程是这样的 (function( window, undefined ) { // .... })( window ...

  4. javascript对象模型和function对象

    javascript中,函数就是对象 <html> <head> <script type="text/javascript"> functio ...

  5. JavaScript高级篇之Function对象

    JavaScript高级篇之Function对象 一: Function对象引入: Function对象是js的方法对象,可以用Function实例化出任何js方法对象. 例如: <%@ pag ...

  6. jsp中的javascript的$(document).ready( function() { $("#loginForm").validate()

    转自:https://bbs.csdn.net/topics/392459787?list=71147533 下面是jsp页面中的JavaScript代码 $(document).ready( fun ...

  7. JavaScript权威设计--JavaScript函数(简要学习笔记十一)

    1.函数调用的四种方式 第三种:构造函数调用 如果构造函数调用在圆括号内包含一组实参列表,先计算这些实参表达式,然后传入函数内.这和函数调用和方法调用是一致的.但如果构造函数没有形参,JavaScri ...

  8. JavaScript权威设计--JavaScript函数(简要学习笔记十)

    1.函数命名规范 函数命名通常以动词为前缀的词组.通常第一个字符小写.当包含多个单词时,一种约定是将单词以下划线分割,就像"like_Zqz()". 还有一种就是"lik ...

  9. javascript笔记:javascript的关键所在---作用域链

    javascript里的作用域是理解javascript语言的关键所在,正确使用作用域原理才能写出高效的javascript代码,很多javascript技巧也是围绕作用域进行的,今天我要总结一下关于 ...

  10. JavaScript学习13 JavaScript中的继承

    JavaScript学习13 JavaScript中的继承 继承第一种方式:对象冒充 <script type="text/javascript"> //继承第一种方式 ...

随机推荐

  1. for update被锁定解锁

     查找被锁定的表,用户,session:SELECT object_name, machine, s.sid, s.serial#FROM gv$locked_object l, dba_object ...

  2. SQL利用临时表实现动态列、动态添加列

    --方法一--------------------------------------------------------------------- declare @sql as varchar(1 ...

  3. 016_openxml_forxml

    016_openxml_forxml --openxml*********************************************************************** ...

  4. ejabberd,erlang,简单看了一下,总结一下,很肤浅

    本来也没打算深入学习erlang,就是看一下他们的大概思路erlang每个自定义函数都能注册成进程,每个节点通过erl -name 'name@ip'.进去后,可以直接做远程调用,节点之间就靠一个连接 ...

  5. 如何根据Jquery实现两级联动

    <script language="javascript" type="text/javascript" > $(function (){      ...

  6. 在jQuery.getData中renderCallback使用不同创建方式的结果

    JavaScript 中需要创建函数的话,有两种方法:函数声明.函数表达式,各自写法如下:// 方法一:函数声明function foo() {}// 方法二:函数表达式var foo = funct ...

  7. JS 日常

    判断一个字符串是否在另一个字符串里面 var str = 'bblText'; if(str.indexOf("Text") > 0)  alert("包含了Tex ...

  8. select options常用操作

    1.判断select选项中 是否存在Value="value"的option元素 function jsSelectIsExitItem(objSelect,objItemValu ...

  9. django自带User管理中添加自己的字段方法

    #coding=utf-8 from django.db import models from django.contrib.auth.models import User, make_passwor ...

  10. sql如何向一个表中批量插入大量数据

    --如果是一个表插入另外一个表.insert into tb1 需要的列名 select 按照前面写上需要的列名 from tb2 --如果两表结构一样.insert into tb1 * selec ...