Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么语法func1(func2)(参数);工作叫什么?_Javascript_Function_Arguments_Higher Order Functions - Fatal编程技术网

Javascript 为什么语法func1(func2)(参数);工作叫什么?

Javascript 为什么语法func1(func2)(参数);工作叫什么?,javascript,function,arguments,higher-order-functions,Javascript,Function,Arguments,Higher Order Functions,摘自《雄辩的Javascript》第三版第5章。 在我的研究中,我似乎找不到这个结构“f()()”,我想了解更多 我希望能够使用 噪音(数学最小值(3,2,1)); 但这样做时没有输出。 但是,本书的示例按预期工作。但是怎么做呢 书籍示例: 功能噪音(f){ 返回(…参数)=>{ log('calling with',args); 设结果=f(…args); log('called with',args+',returned',result); 返回结果; }; } 噪音(数学最小值)

摘自《雄辩的Javascript》第三版第5章。 在我的研究中,我似乎找不到这个结构“f()()”,我想了解更多

我希望能够使用

噪音(数学最小值(3,2,1));
但这样做时没有输出。 但是,本书的示例按预期工作。但是怎么做呢

书籍示例:

功能噪音(f){
返回(…参数)=>{
log('calling with',args);
设结果=f(…args);
log('called with',args+',returned',result);
返回结果;
};
}    
噪音(数学最小值)(3,2,1);
f()()
调用名为
f
的函数,该函数可能返回一个函数-然后,最后的
()
调用该返回函数。乙二醇

const f=()=>{
log('first invoke');
return()=>console.log('secondinvoke');
};
const returnedFn=f();
console.log('---');
返回fn()
f()()
调用名为
f
的函数,该函数可能返回一个函数,然后,最后的
()
调用该返回函数。乙二醇

const f=()=>{
log('first invoke');
return()=>console.log('secondinvoke');
};
const returnedFn=f();
console.log('---');
返回fn()
noised()
将函数作为参数(这一点可以通过行
let result=f(…args);
看出)
Math.min(3,2,1)
解析为一个值,而不是一个函数,它解释了当传递到
noise()
时它为什么不工作

所有的
f()()
意味着函数
f
返回一个函数,然后函数本身被执行。如果我们把它分解成这样,可能更容易理解:

设g=f();
设结果=g();
noised()
将函数作为参数(这一点可以从以下行看出:
let result=f(…args);
Math.min(3,2,1)
解析为一个值,而不是一个函数,它解释了当传递到
noise()
时它为什么不工作

所有的
f()()
意味着函数
f
返回一个函数,然后函数本身被执行。如果我们把它分解成这样,可能更容易理解:

设g=f();
设结果=g();

noised
将函数作为参数并返回一个参数。每当你尝试
嘈杂(Math.min(3,2,1))
Math.min(3,2,1)
的结果传递给noise,这与调用
noised(1)
相同

您还可以将混乱的指令分为两部分:

让noisyMin=noised(Math.min);
noisyMin(3,2,1);
基本上,您只需通过
noise(Math.min)
得到一个函数,然后立即调用它


f()()
仅当
f()
返回一个函数时才可能。

noised
将函数作为参数并返回一个参数。每当你尝试
嘈杂(Math.min(3,2,1))
Math.min(3,2,1)
的结果传递给noise,这与调用
noised(1)
相同

您还可以将混乱的指令分为两部分:

让noisyMin=noised(Math.min);
noisyMin(3,2,1);
基本上,您只需通过
noise(Math.min)
得到一个函数,然后立即调用它


f()()
只有在
f()
返回一个函数时才可能。

它返回一个函数,因此可以按照您显示的方式调用它。允许传入一个函数,然后在被调用时执行相同的函数,以便更好地理解:
const minWithNoise=noise(Math.min);minWithNoise(3,2,1)。这称为高阶函数,因为
noised
将一个函数作为参数并返回另一个函数。@mplungjan这与currying无关。它返回的是一个函数,因此可以按照您显示的方式调用。允许传入一个函数,然后在被调用时执行相同的函数,以便更好地理解:
const minWithNoise=noise(Math.min);minWithNoise(3,2,1)。这称为高阶函数,因为
noised
将一个函数作为参数并返回另一个函数。@mplungjan这与currying无关这是一种currying形式吗@mplungjan no.来自您链接的文章:“curry将具有多个参数的函数转换为一系列函数,每个函数都具有一个参数。”但是,
noise(Math.min)
仍然具有多个参数。这是curry的一种形式吗@mplungjan no.来自您链接的文章:“curry将具有多个参数的函数转换为一系列函数,每个函数都具有一个参数。”但是,
noise(Math.min)
仍然具有多个参数。