Ali*_*eri 1 javascript ecmascript-6
我怎么能有一个JavaScript函数让我们说piper()哪个函数作为参数,它返回一个新函数,将其参数传递给第一个函数,然后将结果传递给第二个函数,然后将第二个结果传递给第三个函数等等,最后返回最后一个函数的输出.
类似于piper(foo, fee, faa)(10, 20, 30)调用的东西faa(fee(foo(10,20,30))).
ps:这是我几天前做的一次采访的一部分.
对于arbritrary函数,您可以使用此ES6函数:
function piper(...fs) {
return (...args) => fs.reduce((args,f) => [f.apply(this,args)],args)[0];
}
// Example call:
var result = piper(Math.min, Math.abs, Math.sqrt)(16, -9, 0)
// Output result:
console.log(result);Run Code Online (Sandbox Code Playgroud)
ES5语法中的相同内容:
function piper(/* functions */) {
var fs = [].slice.apply(arguments);
return function (/* arguments */) {
return fs.reduce(function (args,f) {
return [f.apply(this,args)];
}.bind(this), [].slice.apply(arguments))[0];
}.bind(this);
}
// Example call:
var result = piper(Math.min, Math.abs, Math.sqrt)(16, -9, 0)
// Output result:
console.log(result);Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2006 次 |
| 最近记录: |