一、ES6 从 2015 年之后已经成为新的语言标准
function secret (message) {
return function () {
return message;
}
};
可以简写为:
const secret = msg => () => msg;
小结:很简单的例子,只是利用了ES6中箭头函数的语法
二、point-free-style是函数编程里面的概念,常见方式:函数科里化,函数组合。不好记的概念,看了例子就会明白
函数科里化 例子:
var add = a => b => a+b;
var inc = add(5);
console.log(inc(4));
结果:9
一般是这样写:
var add = function(a){
return function(b){
return a+b;
}
}
小结:编码风格看起来更简单,更容易理解
函数组合 例子:
需求:给定输入,先对其 +1,再对结果 x2
如果按照一般的写法,
const g = a => a+1;
const f = a => a*2;
const increment = n => {
const incremented = g(n);
return f(incremented);
};
console.log(increment(2));
结果:6
使用函数组合写法 (复合函数) :
const g = a => a+1;
const f = a => a*2;
const increment = a => b => f(g(b));
const inc = increment();
console.log(inc(2));
结果:6
三、也可以把参数封装成可遍历的数组,然后使用 map 或者 Promise 的 then 实现链式调用:
使用map:
const g = a => a+1;
const f = a => a*2;
const increment = (g,f) => x => [x].map(g).map(f).pop();
const inc = increment(g,f);
console.log(inc(2));
结果:6
Promise 的 then链式调用:
const g = a => a+1;
const f = a => a*2;
const increment = (g,f) => x =>
new Promise(function(resolve){
resolve(x);
})
.then( data => Promise.resolve(g(data)) )
.then( data => Promise.resolve(f(data)) ).then( data => console.log(data) );
const inc = increment(g,f);
inc(2);
结果:6