use*_*056 6 javascript function
我理解调用函数(1)而不是函数(1)(2),它是如何工作的?
功能(1)(2)(3)(4)也可以吗?
Bru*_*eis 11
在这种情况下,假设函数(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'
Run Code Online (Sandbox Code Playgroud)
这里我们创建一个带有sum一个参数的函数.在函数内部sum,我们创建了anonymous function另一个参数.执行结果返回此匿名函数sum.
请注意,这个匿名函数是我们称之为闭包的一个很好的例子.闭包是一个保持创建它的上下文的函数.在这种情况下,它将保持变量的值a在其中,就像示例函数一样add2.如果我们创建了许多闭包,它们是独立的,如您所见:
var add3 = sum(3);
var add4 = sum(4);
window.alert(add3(3)); // shows 6
window.alert(add4(3)); // shows 7
Run Code Online (Sandbox Code Playgroud)
此外,如果您具有类似命名的局部变量,它们将不会"混淆":
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));
Run Code Online (Sandbox Code Playgroud)
所以,在调用之后sum(2)或multiply(2)结果不是数字,也不是字符串,而是一个function.这是函数式语言的一个特征- 函数可以作为参数传递并作为其他函数的结果返回的语言.