如何在javascript中使用函数(1)(2)?它是如何工作的?
我理解调用函数(1),但不理解函数(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)(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)
也一样好,而且输入也更少。我知道。我觉得最好不要使用匿名函数来混淆手头的问题。