javascript - 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'));
解决方案
让我们分解一下:
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")
如果我们fb
用fa(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"
推荐阅读
- java - How to show Android Media Controls?
- php - 简单的 HTML DOM 解析器 - 在 foreach 循环中显示变量时出现问题
- mongodb - 如何更新 mongoDB 的功能兼容版本
- javascript - 根据屏幕尺寸调整图像大小
- python - Pandas Dataframe.resample() 不会覆盖 DataFrame
- javascript - 如何使用 CryptoJS 加密并使用 Rust Magic Crypt 解密
- python - SVG 质量极差 [kivy]
- python - Dynamodb 扫描分页没有按我的预期工作
- r - 计算在R中存储为字符的变量
- django - 你能在 DRF ModelViewSet 中获取请求方法吗?