首页 > 解决方案 > 如何编写高阶函数以在 JavaScript 中提供控制流?

问题描述

EloquentJS 第 5 章高阶函数在函数示例中提供了新类型的控制流。

有人可以帮我解释为什么除非函数的第二个参数必须是

() => { console.log(n, "是偶数"); }

而不仅仅是

console.log(n, "是偶数")

function repeat(n, action) {
    for (let i = 0; i < n; i++) {
        action(i);
    }
}

function unless(test, then) {
    if (!test) then();
}

repeat(3, n => {
    unless(n % 2 == 1, () => {
        console.log(n, "is even");
    });
});
// → 0 is even
// → 2 is even

当我尝试仅通过时

console.log(n, "是偶数")

作为 unless 函数的第二个参数,结果与预期不符,而不是仅打印偶数,而是打印了所有数字。

function unless(test, then) {
    if (!test) then;
}

repeat(3, n => {unless(n % 2 == 1, console.log(n, "is even"));});
// → 0 is even
// → 1 is even
// → 2 is even

标签: javascripthigher-order-functions

解决方案


推荐阅读