gpt4 book ai didi

javascript - JavaScript 中的高阶函数

转载 作者:行者123 更新时间:2023-11-28 18:34:54 24 4
gpt4 key购买 nike

我正在阅读《Eloquent》这本书来学习 javascript。我遇到过这个例子

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

function repeat(times, body) {
for (var i = 0; i < times ; i++) body(i);
}

repeat(3, function (n) {
unless(n % 2, function () {
console.log(n, " is even ");
});
});

// → 0 is even
// → 2 is even

我知道函数可以作为参数传递,并且可以相互嵌套。但是 then()body() 是函数吗?它们在哪里定义的? n 的值是多少?

最佳答案

but are then() and body() functions?

thenbody 是参数。它们的值取决于传递给unlessrepeat 的值。因此,为了确定这些值是什么(即它们是否是函数),您需要查看 unlessrepeat 被调用的位置以及传递给它们的值.

请记住,一般来说,repeatunless 可以被多次调用。对于每个函数调用,thenbody 的值可以不同,但​​它们必须是函数的类型(数字、字符串、函数...)期望,否则将无法正常工作。

Where are they defined?

在您的示例中,此处调用了 repeatunless:

repeat(3, function (n) {
unless(n % 2, function () {
document.write(n + " is even<br>");
});
});

您可以看到传递给 repeatunless 的第二个参数确实是函数。

What's the value of n?

让我们看看这个函数是在哪里被调用的。该函数作为第二个参数传递给repeatrepeat 使用 body 引用第二个参数,随后在循环中将其调用为 body(i)i 的值为 0times - 1times 是传递给 repeat 的第一个参数,在您的示例中为 3。因此该函数将被调用多次(三)次,接收值 012

关于javascript - JavaScript 中的高阶函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37303704/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com