gpt4 book ai didi

javascript - Javascript 中的高阶函数

转载 作者:行者123 更新时间:2023-12-03 00:00:34 24 4
gpt4 key购买 nike

我正在阅读 Eloquent JavaScript ( The new edition ),并且读到了有关高阶函数的部分,但我对以下代码中发生的情况感到困惑。

function noisy(f) {
return function(arg) {
console.log("calling with", arg);
var val = f(arg);
console.log("called with", arg, "- got", val);
return val;
};
}
noisy(Boolean)(0);
// → calling with 0
// → called with 0 - got false
  1. 为什么函数的调用如此嘈杂? (Boolean) 是强制转换吗?选 Actor 是为了什么?返回值?或论证?如果它是返回值,为什么不 (Boolean)noisy(0) 呢?或者,如果参数是正在转换的参数,则为“noisy((Boolean) 0)”。

    noisy(Boolean)(0)
  2. 这一行发生了什么? f() 是在哪里定义的?

    var val = f(arg);

最佳答案

  1. Boolean 是一个函数。这是您通过 noisy 间接调用的函数。我知道有点令人困惑,因为它看起来像一个类型的名称。但在 JavaScript 中,那些初始上限的东西(BooleanNumberString 等)是函数 。当您调用 Boolean(使用 new)时,它会尝试将您提供的参数转换为 boolean原始值并返回结果。 (请参阅规范中的 §15.6.1。)

  2. fnoisy 函数中参数的名称。

JavaScript 中的函数是一流的对象。您可以将它们作为参数传递到其他函数中,就像任何其他对象一样。

当你这样做时

noisy(Boolean)(0)

有两件事正在发生。第一:

// (In effect, we're not really creating a variable...)
var x = noisy(Boolean);

这为我们提供了一个函数,在调用时,它将使用我们给它的参数调用 Boolean,同时执行这些 console.log 语句。这是您在 noisy 中看到的创建函数 (return function(arg)...);

然后我们调用该函数:

x(0);

这时您就会看到控制台输出。由于 Boolean(0)false,因此您会看到 Boolean 返回该值。

这是一个更简单的示例:

function foo(bar) {
bar();
}
function testing() {
alert("testing got called");
}
foo(testing);

在那里,我将函数 testing 传递给 foo。我在 foo 中使用的参数名称是 barbar(); 行调用该函数。

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

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