我一直在读一本关于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。如果有人能解释这是如何工作的,我将感激不尽?提前谢谢。
答案 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 = Boolean
和arg = 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)