嵌套函数和闭包:内部函数形成了一个闭包,把内部函数当作返回值返回?

function outside(x) {
  function inside(y) {
    return x + y;
  }
  return inside;
}
// Think of it like: give me a function that adds 3 to whatever you give it
fn_inside = outside(3); 
result = fn_inside(5); // returns 8

result1 = outside(3)(5); // returns 8

"outside(3)(5)"怎样理解;为什么result1得到的返回值是8?

阅读 3.9k
3 个回答

这是一个典型的闭包。
outside(3)(5)是连续的两次函数调用。
分开理解就容易多了:

var inside = outside(3);
var result = inside(5);
  • 第一次调用外部函数outside,返回值inside就是内部函数,并且内部函数以闭包的形式捕获了变量x

  • 第二次调用第一次返回的内部函数inside,执行加法(将闭包捕获的3与参数5相加),返回值为Number类型的值8。

第一次调用fn_inside = outside(3); 由于闭包依赖原则 3这个值将会被保存在内存中不会因为调用结束而delete掉,第二次调用会直接执行内部闭包函数返回X+Y 的值也就是8

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题