/**
* @param {Function[]} functions
* @return {Function}
*/
var compose = function(functions) {
return function(x) {
return functions.reduceRight((result, func) => func(result), x);
}
};
/**
* const fn = compose([x => x + 1, x => 2 * x])
* fn(4) // 9
*/
说明:
-
reduceRight
的第一次迭代:func
是数组中的最后一个函数x => 2 * x
。result
初始值是4
(传入fn
的参数)。func(result)
即执行x => 2 * x
函数,得到2 * 4 = 8
,这个值成为下一次迭代的result
。
-
reduceRight
的第二次迭代:func
是数组中的第一个函数x => x + 1
。result
是上一次迭代的结果8
。func(result)
即执行x => x + 1
函数,得到8 + 1 = 9
。
最终,fn(4)
的调用输出 9
,这是因为整个 compose
函数依次执行了数组中的函数,并将结果传递给下一个函数。