摘自《 Eloquent Javascript第三版》第5章。
我似乎在研究中找不到此构造'f()()',我想了解更多有关它的信息。

我希望能够使用

noisy(Math.min(3, 2, 1));


但是这样做时没有输出。
但是,本书示例可以按预期工作。但是如何?

书籍范例:

function noisy(f) {
  return (...args) => {
    console.log('calling with', args);
    let result = f(...args);
    console.log('called with', args + ', returned', result);
    return result;
  };
}
noisy(Math.min)(3, 2, 1);

最佳答案

noisy()将函数作为参数(通过let result = f(...args);行可以明显看出)。 Math.min(3, 2, 1)解析为一个值,而不是函数,这就是为什么将其传递给noisy()时不起作用的原因。

f()()的全部含义是函数f返回一个函数,然后该函数本身将被执行。如果我们将其分解成这样,可能会更容易理解:

let g = f();
let result = g();

关于javascript - 为什么语法func1(func2)(parameters);工作,这叫什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58685123/

10-09 14:11