使用布尔值作为参数的高阶函数



我一直在读一本关于JavaScript的书,即雄辩的JavaScript,我遇到了以下函数。我不明白它到底是怎么工作的?

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

什么类型的参数是布尔值,一个接一个地传递两个参数对JavaScript有什么影响。如果有人能解释一下这是怎么回事,我会很感激的。

布尔值是一个内置函数/构造函数,参见https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean。

f(x)(y)表示:调用f,传递x作为参数。然后接受返回值(必须是另一个函数),并调用它,传递y作为参数。它像var tmp = f(x); tmp(y);一样工作。

noisy(Boolean)返回

function(arg) {
    console.log("calling with", arg);
    var val = f(arg);
    console.log("called with", arg, "- got", val);
    return val;
};

其中f绑定到Boolean

然后用0调用该函数执行

console.log("calling with", arg);
var val = f(arg);
console.log("called with", arg, "- got", val);
return val;

其中f = Booleanarg = 0,即

console.log("calling with", 0);
var val = Boolean(0);
console.log("called with", 0, "- got", val);
return val;

我认为你的问题是:

  • Boolean是一个函数—它是布尔原语的对象包装器类型的标准构造函数;
  • noisy()是一个接受一个函数作为参数并返回另一个函数的函数;
  • …因此,调用noisy(Boolean)将产生一个函数,因此该函数可以带另一个带括号的参数列表调用。

noisy(Boolean)(0)

调用noisy()函数,然后调用返回的函数。返回的函数记录消息(我猜这就是为什么它被称为"嘈杂")并显示原始传递的函数(Boolean)的功能。

Boolean是一个javascript基本类型构造函数

noisy(Boolean)将返回以下函数

function(arg) {
    console.log("calling with", arg);
    var val = Boolean(arg); // <- see the Boolean here
    console.log("called with", arg, "- got", val);
    return val;
}

所以noisy(Boolean)(0);将执行上面的函数传递0作为参数9arg)

最新更新