在javascript中我们可以调用函数作为functionName(5)(3);?

Vin*_*mar 1 javascript

在javascript中我们可以调用下面提到的函数吗?如果是这样的话背后的逻辑是什么?

var pro = function(a){
...
}

pro(5)(3);
Run Code Online (Sandbox Code Playgroud)

Mar*_*eed 5

var pro = function(a) { return function(b) { return a * b; } };
console.log(pro(5)(3));  // 15
Run Code Online (Sandbox Code Playgroud)

基本上,如果函数的返回值本身就是一个函数,那么您可以转而在同一个表达式中立即调用返回的函数; 这就是语法的含义.您还可以使用中间变量:

var times5 = pro(5);
console.log(times5(3)); // 15
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,结果与您times5直接定义的结果相同:

function times5(b) { return 5 * b; }
Run Code Online (Sandbox Code Playgroud)

函数返回功能有很多应用; 通常,将函数用作传递给其他函数的表达式中的常规值等等称为高阶编程.作为Javascript中的实际问题,在动态创建或关联网页元素与动作功能时,您通常必须这样做; 调用函数返回函数可以确保每个函数都获得自己的唯一变量,避免由于var作用域的限制而导致的重用.

在某些其他语言中,当您向函数传递的参数太少时,它会自动返回另一个函数,该函数将在传递其余参数时完成作业.这在Haskell Curry之后称为currying,并且在给出其他名称的语言中,这实际上是编写多个参数的函数的唯一方法:编写一个返回函数的函数,该函数返回一个函数...它接受最后一个参数和返回结果.