/*** @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
函数依次执行了数组中的函数,并将结果传递给下一个函数。