如何在javascript中使用函数(1)(2)?它是如何工作的?

如何在javascript中使用函数(1)(2)?它是如何工作的?,javascript,function,Javascript,Function,我理解调用函数(1),但不理解函数(1)(2),它是如何工作的 函数(1)(2)(3)(4)也有可能吗?在这种情况下,您假设函数(1)返回一个函数,而不是使用参数2调用这个新的匿名函数 请参见此示例: function sum(a) { return function(b) { return a+b; } } // Usage: window.alert(sum(5)(3)); // shows 8 var add2 = sum(2); win

我理解调用函数(1),但不理解函数(1)(2),它是如何工作的


函数(1)(2)(3)(4)也有可能吗?

在这种情况下,您假设函数(1)返回一个函数,而不是使用参数2调用这个新的匿名函数

请参见此示例:

function sum(a) {
    return function(b) {
        return a+b;
    }
}

// Usage:
window.alert(sum(5)(3));         // shows 8

var add2 = sum(2);
window.alert(add2(5));           // shows 7
window.alert(typeof(add2));      // shows 'function'
这里我们创建一个函数
sum
,它接受一个参数。在函数
sum
中,我们创建了一个接受另一个参数的
匿名函数。此匿名函数作为执行
sum
的结果返回

请注意,这个匿名函数是我们称之为的一个很好的例子。闭包是一个函数,它保留创建闭包的上下文。在这种情况下,它会将变量
a
的值保存在其中,就像示例函数
add2
一样。如果我们创建多个闭包,它们是独立的,如您所见:

var add3 = sum(3);
var add4 = sum(4);

window.alert(add3(3)); // shows 6
window.alert(add4(3)); // shows 7
此外,如果您具有类似的局部变量名称,则它们不会“混淆”:

var a = "Hello, world";

function multiply(a) {
    return function(b) {
        return a * b;
    }
}

window.alert(multiply(6)(7)); // shows 42

var twoTimes = multiply(2);
window.alert(typeof(twoTimes));
window.alert(twoTimes(5));

因此,调用
sum(2)
multiply(2)
后,结果既不是数字,也不是字符串,而是一个
函数。这是--语言的一个特征,在这些语言中,函数可以作为参数传递,并作为其他函数的结果返回。

如果函数返回函数,也可以调用该函数

x = f(1)(2)
相当于:

f2 = f(1)
x = f2(2)

括号表示函数的调用(您“调用”它)。如果你有

<anything>()

然后,您可以将其作为
add(1)(2)
调用,该值等于3。当然,您可以根据需要对其进行扩展。

您有一个返回函数的函数:

function add(n1) {
    return function add_second(n2) { 
        return n1+n2
    }
}
function f(n) {
  return function(x) {
    return n + x;
  };
}
当你调用f(1)时,你会得到一个函数的引用。您可以将引用存储在变量中并调用它:

var fx = f(1);
var result = fx(2);
或者您可以直接调用它:

var result = f(1)(2);
要获取返回函数的函数,只需重复以下过程:

function f(n) {
  return function(x) {
    return function(y) {
      return function(z) {
        return n + x + y + z;
      }
    }
  };
}

对否决票好奇吗?如果你不解释你不喜欢的是什么,那是毫无意义的…不需要给返回的函数命名,顺便说一句。
返回函数(n2)
也一样好,而且输入也更少。我知道。我觉得最好不要使用匿名函数来混淆手头的问题。