Javascript:sum(2)(3)的含义是什么//返回5;

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)

当然,这相当于第一个片段.