首页 > 解决方案 > JS函数以相反的顺序组成

问题描述

从一个简单的函数组合开始

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'));

标签: javascriptfunctional-programmingfunction-composition

解决方案


让我们分解一下:

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") 

如果我们fbfa(y => y)(ie. _fa) 调用,我们用next代替_fa

_fb = fb(fa(y => y))
// _fb = x2 => (x1 => (y => y)(x1 + "a"))(x2 + "b")

现在让我们_fb用参数进行评估x2 = 'x'

// _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 => x1 + "a")用参数评估这个函数x1 = "xb"

// _fb = "xb" + "a"
// _fb = "xba"

推荐阅读