首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JS高阶混淆

JS高阶混淆
EN

Stack Overflow用户
提问于 2016-09-08 10:46:43
回答 2查看 50关注 0票数 0

我正在阅读JavaScript Alonge,第一个高阶函数使我感到困惑,并在理解输出和为什么会这样做方面寻求一些帮助。

代码语言:javascript
复制
const repeat = (num, fn) =>
    (num > 0)
        ? (repeat(num - 1), fn), fn(num))
        : undefined

repeat(3, function(n) {
    console.log(`Hello ${n}`)
})

产出如下:

代码语言:javascript
复制
Hello 1
Hello 2
Hello 3
undefined

我的困惑是,如果我将3作为值传递给3,那么它将从2开始,并且它大于0,然后调用重复。这就是我陷入困境的地方,因为在我看来,这在我看来是从2开始的,需要帮助如何在输出的过程中穿行。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-08 11:04:07

如果我将3作为值传递给3,那么它将从2开始,并且它大于0,然后调用重复。

是的,它先叫repeat(2, fn)。但这并不意味着第一个输出将是"2",只意味着它将进一步递归到repeat(1, fn),直到repeat(0, fn)。只有在那之后,它才会调用fn(1),在所有的fn(2)之后,并且最终只调用fn(3)

如果使用? (fn(num), repeat(num - 1), fn)),则顺序将有所不同。

票数 1
EN

Stack Overflow用户

发布于 2016-09-08 10:50:46

它可能有助于扩展三元操作符:

代码语言:javascript
复制
const repeat = (num, fn) => {
    if (num > 0) {
        repeat(num -1, fn);
        return fn(num);
    } else {
        return undefined;
    }
}

在第4行,您可以看到fn是用numfn(num);调用的。这一行代码将对每个num (包括3 )执行。

另外,由于首先对repeat进行递归调用,所以结果会计数(1 -> 3)。如果你要倒序,它就会倒计时(3 -> 1)。

希望这能有所帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39388923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档