我按照这门课程遇到了这个问题
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 = 1
为g
1
,为a
10
,这使得它f(1(10))
。 但是1
和10
怎么知道加法,为什么不乘以或减去?
这使它
f(1(10))
这不是真的。因为1(10)
甚至不是有效的JavaScript语法。当值10
传递给函数时,g
其返回的值比15
的值多五。这是因为它在函数add5
中定义,该函数作为g
传递给compose
函数
然后,从上述函数调用返回的值15
传递给add1
f
。所以最后它返回16
但是
1
和10
怎么知道加法,为什么不乘以减去。
您正在传递的函数中使用+
。如果您将使用-
或*
它将乘以或减去
这是一种称为咖喱的技术。
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