使用布尔值作为参数的高阶函数
Higher order function using Boolean as argument
我一直在读一本关于 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
什么样的参数是布尔值,什么是一个接一个地传递两个参数JavaScript。如果有人能解释这是如何工作的,我将不胜感激?提前致谢。
Boolean
是一个 javascript 原始类型构造函数
noisy(Boolean)
会 return 以下函数
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)
解决我认为你的问题是:
Boolean
是一个函数——它是布尔基元对象包装器类型的标准构造函数;
noisy()
是一个函数,它以一个函数作为参数,returns另一个函数;
- ...因此调用
noisy(Boolean)
会产生一个函数,因此可以使用另一个带括号的参数列表调用该函数。
所以
noisy(Boolean)(0)
调用noisy()
函数,然后调用返回的函数。返回的函数记录消息(我想这就是它被称为 "noisy" 的原因)并显示最初传递的函数 (Boolean
) 的作用。
布尔值是内置的 function/constructor,参见 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)
returns
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;
我一直在读一本关于 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
什么样的参数是布尔值,什么是一个接一个地传递两个参数JavaScript。如果有人能解释这是如何工作的,我将不胜感激?提前致谢。
Boolean
是一个 javascript 原始类型构造函数
noisy(Boolean)
会 return 以下函数
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)
解决我认为你的问题是:
Boolean
是一个函数——它是布尔基元对象包装器类型的标准构造函数;noisy()
是一个函数,它以一个函数作为参数,returns另一个函数;- ...因此调用
noisy(Boolean)
会产生一个函数,因此可以使用另一个带括号的参数列表调用该函数。
所以
noisy(Boolean)(0)
调用noisy()
函数,然后调用返回的函数。返回的函数记录消息(我想这就是它被称为 "noisy" 的原因)并显示最初传递的函数 (Boolean
) 的作用。
布尔值是内置的 function/constructor,参见 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)
returns
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;