我正在阅读《 Eloquent JavaScript》这本书。
在第5章中,他描述了一个特定的高阶函数。它被称为noisy()
,它印在下面...
function noisy(f) {
return (...args) => {
console.log("calling with", args);
let result = f(...args);
console.log("called with", args, ", returned", result);
return result;
};
}
这是令我困惑的部分。他按如下方式调用函数noisy
...noisy(Math.min)(3,2,1);
我不明白为什么要这样调用函数。为什么不这样称呼...noisy(Math.Min(3,2,1))
编辑:我现在看到发生了什么事。下面由西蒙(Simone)解释。noisy(Math.min)(3,2,1) is equivalent to (noisy(Math.min))(3,2,1).
最佳答案
如果尝试获取noisy
的类型,则会得到:
typeof noisy
>> "function"
如果您要求
noisy(Math.min)
的类型也是一样:typeof noisy(Math.min)
>> "function"
如果需要,还可以将此函数存储到变量中:
const noisyFunction = noisy(Math.min)
这样就可以像常规函数一样调用它:
noisyFunction(1,2,3)
noisy(Math.min)(3,2,1)
完全相同,只是以不同的较短方式编写。要点是,高阶函数只是返回函数的函数。