难以理解此函数中的Javascript组合



我按照这门课程遇到了这个问题

const compose = (f, g) => (a) => f(g(a));
const add1 = (num) => num + 1;
const add5 = (num) => num + 5;
compose(add1, add5)(10)

据我了解,g(a)首先运行,因此num = 1g1,为a10,这使得它f(1(10))。 但是110怎么知道加法,为什么不乘以或减去?

这使它f(1(10))

这不是真的。因为1(10)甚至不是有效的JavaScript语法。当值10传递给函数时,g其返回的值比15的值多五。这是因为它在函数add5中定义,该函数作为g传递给compose函数

然后,从上述函数调用返回的值15传递给add1f。所以最后它返回16

但是110怎么知道加法,为什么不乘以减去。

您正在传递的函数中使用+。如果您将使用-*它将乘以或减去

这是一种称为咖喱的技术。

compose函数将两个函数作为参数。

这些函数各自采用一个num参数。

调用compose(add1, add5)(10)时,表达式将解析如下:

在调用add5(10)的输出上给我调用add1的输出。在Javascript语法中,这看起来像,f(g(a)),即add1(add5(10)).

如果您按顺序遵循并计算表达式,则为:

compose(f, g)(a) === f(g(a))

compose(add1, add5)(10) === add1(add5(10)) === add1(15) === 16

最新更新