【发布时间】:2019-02-02 06:17:59
【问题描述】:
trincot 在 2016 年 10 月发表了一篇关于使用 reduce 方法 (link to posting) 构建管道函数的精彩帖子,我正在尝试详细了解代码。
ES6 版本
function piper(...fs) {
return (...args) => fs.reduce((args,f) => [f.apply(this,args)],args)[0];
}
具体来说:
1. 代替[f.apply(this.args)],f(...args) 也可以工作,但f(args) 不工作。为什么f(args) 不起作用?
2.关于内部(匿名)“reduce”函数中的第二个参数,为什么args甚至是必要的? . . .,即为什么下面的代码不起作用?
function piper(...fs) {
return (...args) => fs.reduce((args,f) => [f.apply(this,args)])[0];
}
B.或者,为什么我们不能只使用[] 作为参数而不是args?
function piper(...fs) {
return (...args) => fs.reduce((args,f) => [f.apply(this,args)],[])[0];
}
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);
}
问题:
1、在内部(匿名)reduce函数中,为什么需要第二个参数[].slice.apply(arguments)?即,为什么 [] 不能代替它工作?
2. 或者,为什么我们不能完全忽略这个参数?
非常感谢您帮助我更深入地了解这些问题。
【问题讨论】:
标签: javascript