1.使い方:
var arr = [1, 2, 3, 4, 5]
var result = arr.reduce(function(prev, curr) {
return prev + curr
});
// result = 15
第二に、実現原理:
Array.prototype.myReduce = function(fn, initialValue) {
if (this.length === 0) {
if (initialValue === undefined) {
console.error("reduce of empty array with no initialValue")
} else {
return initialValue
}
} else {
var prev = initialValue !== undefined ? initialValue : this[0]
var startIndex = initialValue !== undefined ? 0 : 1
for (var i = startIndex; i < this.length; i++) {
prev = fn(prev, this[i])
}
return prev
}
}
3、使用分析:
function f1() {
console.log("f1");
}
function f2() {
console.log("f2");
}
function f3() {
console.log("f3");
}
compose(f1,f2,f3)(); // f1,f2,f3
function compose(...funcs) {
const len = funcs.length;
if (len === 0) {
return arg => arg;
}
if (len === 1) {
return funcs[0];
}
return funcs.reduce((left, right) => {
return (...args) => right(left(...args))
});
}
funcs.reduce((left、right)=> {
return(... args)=> right(left(... args))// newF
});
//この段落を分析します
prev = funcs [0]; //左-> f1
for(var i = 1; i <len; i ++){
prev = fn(prev、funcs [i])// prev = fn(f1、f2)=(... args)=> f2(f1(... args)); sumFn最初のループ
// prev = fn(sumFn、f3)=(... args)=> f3(sumFn(... args))2番目のループ
// funcs.reduce =(... args)=> f3(sumFn(... args));戻り値
}
前へ戻る;