使用Boolean作为参数的高阶函数

时间:2015-07-26 10:52:15

标签: javascript boolean higher-order-functions

我一直在读一本关于JavaScript的书,即Eloquent 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

什么类型的Argument是布尔值,并且一个接一个地传递两个参数的做法是JavaScript。如果有人能解释这是如何工作的,我将感激不尽?提前谢谢。

3 个答案:

答案 0 :(得分:3)

要解决我认为您的问题:

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

所以

noisy(Boolean)(0)

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

答案 1 :(得分:2)

Boolean是内置函数/构造函数,请参阅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;

答案 2 :(得分:1)

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)