let dragon =
name =>
size =>
element =>
`${name} is a ${size} dragon that breathes ${element} !`
let output = dragon('Chasen')('large')('ice')
console.log(output) // Chasen is a large dragon that breathes ice !
有没有感觉?函数返回函数返回函数,参数缓存!这种代码要慢慢细品,像熬粥一样慢慢。
再来一个加法函数
function add() {
var _args = Array.prototype.slice.call(arguments);
var _adder = function () {
_args.push(...arguments);
return _adder;
}
// toString隐形转化的特性
_adder.toString = function () {
return _args.reduce((a,b)=>{
return a+b;
}, 0);
}
return _adder;
}
console.log(add(1)); // 1
console.log(add(1,1,2)(4,3) == 11); // true
console.log(add(3,5)); // 8
lodash 提供了一个curry函数
import _ from 'lodash'
let dragons = [
{name: 'a', element: 'lighting'},
{name: 'b', element: 'lighting'},
{name: 'c', element: 'fire'},
{name: 'd', element: 'timewrap'}
]
let hasElement =
_.curry((element, obj)=> obj.element === element);
let lightingDragons =
dragons.filter(hasElement('lighting'))
console.log(lightingDragons)
//0: {name: "a", element: "lighting"}
//1: {name: "b", element: "lighting"}