javascript - 以相反顺序组成的 JS 函数

标签 javascript functional-programming function-composition

从简单的函数组合开始

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/

相关文章:

javascript - 在 ng-click Angularjs 上传递所有记录字段

algorithm - 理解 List.fold_left 并使用它实现插入排序

haskell - 如何用一元函数组成一个二元函数?

javascript - 如何使用 jsonfile npm 在 javascript 中查找 JSON 文件的长度

javascript - 异常 : TypeError: undefined is not an object (evaluating 'pipe.constructor' ) in Ionic 2?

javascript - 添加到购物车按钮不改变购物车数量

algorithm - 纯函数式编程的效率

scala - 在scala中根据条件创建两个列表

go - 使用 Go 泛型实现处理器链

Golang 多值函数组合