Javascript 为什么语法func1(func2)(参数);工作叫什么?
摘自《雄辩的Javascript》第三版第5章。 在我的研究中,我似乎找不到这个结构“f()()”,我想了解更多 我希望能够使用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); 返回结果; }; } 噪音(数学最小值)
噪音(数学最小值(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)
仍然具有多个参数。