我正在完成bfe.dev的JavaScript编码练习的问题11。这个问题要求通过组合将多个基本数学函数连接在一起。
下面是一些通过所提供的测试用例的示例代码。
function pipe(funcs) {
let result;
return function (arg) {
result = arg;
for (let fn of funcs) {
result = fn(result);
}
return result;
}
}
根据bfe.dev 的说法,还有一些具有预期结果的驱动程序代码
pipe([
times(2),
plus(3),
times(4)
])
// (x * 2 + 3) * 4
我很难理解代码级别的实现。pipe
接收一个函数数组,我知道方法是遍历数组并计算每个函数的结果,将其存储在result
变量中,类似于数组reduce。
但我无法理解return函数是如何工作的,以及arg
实际是什么。如果可能的话,我希望能逐行演练。
提前感谢!
这个例子可能需要更多的内容才能理解:
const doMath = pipe([
times(2),
plus(3),
times(4)
])
const finalResult = doMath(5)
console.log(finalResult);
pipe
的工作是创建一个新函数。这个新功能的文本是:
function (arg) {
result = arg;
for (let fn of funcs) {
result = fn(result);
}
return result;
}
这就是在我的例子中分配给doMath
的内容。然后,当我调用doMath(5)
时,它将执行代码,arg
等于5。它将5分配给result
,然后开始循环遍历函数(因为这是一个闭包,所以它仍然可以访问这些函数(。每个函数都计算一个新值,该值被分配给result
,然后最终返回最终结果。因此在这种情况下,计算进行5=>10=>13=>52.52返回,然后注销。