从简单的函数组合开始
const fa = (x => (x + "a"));
const fb = (x => (x + "b"));
fb(fa('x'))
我尝试了一下,获得了以下代码片段,它返回“xba”而不是“xab”。
谁能解释一下为什么吗?
const fa = next => x => next(x + "a");
const fb = next => x => next(x + "b");
console.log(fb(fa(y => y))('x'));
最佳答案
让我们来分解一下:
const _fa = fa(y => y)
// _fa = x => (y => y)(x + "a")
为了避免混淆两个 x
,我们将其命名为 x1
// _fa = x1 => (y => y)(x1 + "a")
现在fb
将是:
// fb = next => x2 => next(x2 + "b")
如果我们使用 fa(y => y)
(即 _fa
)调用 fb
,我们将替换 next
与_fa
:
_fb = fb(fa(y => y))
// _fb = x2 => (x1 => (y => y)(x1 + "a"))(x2 + "b")
现在让我们使用参数 x2 = 'x'
来计算 _fb
:
// _fb = (x1 => (y => y)(x1 + "a"))("x" + "b")
// _fb = (x1 => (y => y)(x1 + "a"))("xb")
请注意如何将 x1 => (y => y)(x1 + "a")
简化为 x1 => x1 + "a"
。现在我们有:
// _fb = (x1 => x1 + "a")("xb")
现在让我们用参数 x1 = "xb"
来评估这个函数 (x1 => x1 + "a")
// _fb = "xb" + "a"
// _fb = "xba"
关于javascript - 以相反顺序组成的 JS 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50911297/