了解JavaScript中的管道函数(函数式编程)



我正在完成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返回,然后注销。

最新更新