avi*_*e00 1 javascript closures
这是代码打击,以返回它的价值.
function sum(a){
return function(b){
return a+b;
}
}
sum(2)(3);
Run Code Online (Sandbox Code Playgroud)
它返回5但是如果我键入代码:
function sum(a){
function add(b){
return a+b;
}
return add(b);
}
Run Code Online (Sandbox Code Playgroud)
它没有返回预期值5.我甚至不理解sum(2)(3)如何调用函数.对此的任何解释都非常感谢.
Max*_*xpm 10
这称为闭包.
sum(a)返回一个带有一个参数的函数,b并将其添加到a.可以这样想:
sum(2)(3);
// Is equivalent to...
function add(b){
return 2+b;
}
add(3);
// Which becomes...
return 2+3; // 5
Run Code Online (Sandbox Code Playgroud)
你的第二个片段不起作用,因为你试图b从外部函数引用,但只有内部函数有任何概念b.你想改变这个:
function sum(a){
function add(b){
return a+b;
}
return add(b);
}
Run Code Online (Sandbox Code Playgroud)
对此:
function sum(a){
function add(b){
return a+b;
}
return add; // Return the function itself, not its return value.
}
Run Code Online (Sandbox Code Playgroud)
当然,这相当于第一个片段.