我正在阅读《 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)完全相同,只是以不同的较短方式编写。要点是,高阶函数只是返回函数的函数。

08-19 16:18