How to understand closures in Javascript? [duplicate]

ぐ巨炮叔叔 提交于 2019-12-01 15:47:27
Rick Viscomi

closure is a function bound to one or more external variables

An example of this concept is that the function bar is bound to the external variables x, y, and z:

function foo(x, y) {
  var z = 3;

  return function bar(a, b, c) {
    return (a + b + c) * (x + y + z);
  };
}

var closure = foo(1, 2);
closure(5, 6, 7); // (5 + 6 + 7) * (1 + 2 + 3) = 24

The variable closure refers to the inner function bar returned from the call to foo. Invoking closure is like reentering the scope within foo, which gives visibility into all of foo's local variables and parameters.

even after the parent function has terminated

This means that after foo is executed, the returned function stored in the closure variable persists the state of foo. You can even create multiple independent closures by invoking foo again:

var closure = foo(1, 2);
closure(5, 6, 7); // (5 + 6 + 7) * (1 + 2 + 3) = 24

var closure2 = foo(0, 0);
closure2(5, 6, 7); // (5 + 6 + 7) * (0 + 0 + 3) = 21

/* closure2 does not affect the other closure */
closure(5, 6, 7); // (5 + 6 + 7) * (1 + 2 + 3) = 24

I'm not sure where you are quoting from, but it sounds like it's referencing when the parent function has finished running.

Dark Falcon

Your interpretation of external variables is incorrect. It really means it can do this:

function make_closure() {
  var x = 20;
  return function() {
    console.log(x);
  };
}

var closure = make_closure();
closure(); // Displays 20
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!