我正在阅读下面的 Eloquent Javascript:高阶函数示例,并且已经阅读了问题和解答 here和 here 。但我还是很困惑。
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
既然noisy()只接受一个参数,即( bool 值),那么如何将(0)传递给noisy(f)呢?我可以看到内部函数 f(arg) 基本上是 Boolean(0),但我不明白如何将两个参数传递到只允许一个参数的函数中。会“吵闹( bool )(0)(1)(2)(3);”是一个有效的函数调用吗?如果是这样,您如何区分噪声函数中 bool 值后的每个值? “arg”将引用哪个值?
书中指出示例函数正在修改另一个函数。正在修改哪个功能?我不明白作者所说的“修改”是什么意思。
最佳答案
but I don't understand how two parameters can get passed into a function that only allow one parameter
noisy
返回一个函数,Boolean
被传递给 noisy
,0
被传递给从返回的匿名函数noisy
,其中 f
为 Boolean
,val
变为 Boolean(0)
。
例如
function fn1(arg1) {
return function fn2(arg2) {
console.log(arg1, arg2)
}
}
// Call fn1, inside fn1 fn2 is called with `"b"` as parameter.
fn1("a")("b") // `a b`, `fn2`
关于javascript - Eloquent JavaScript : Higher Order Functions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38068055/