简体   繁体   中英

JavaScript Closure - trying to understand following code

Coming from Java background trying to make sense out of the following code.

From: https://medium.freecodecamp.com/lets-learn-javascript-closures-66feb44f6a44#.cbk6c4e9g

For function bar(c) , which line passes argument c into bar(c) as I don't see it here.

Thanks.

var x = 10;
function foo(a) {
  var b = 20;

  function bar(c) {
    var d = 30;
    return boop(x + a + b + c + d);
  }

  function boop(e) {
    return e * -1;
  }

  return bar;
}

var moar = foo(5); // Closure  
/* 
  The function below executes the function bar which was returned 
  when we executed the function foo in the line above. The function bar 
  invokes boop, at which point bar gets suspended and boop gets push 
  onto the top of the call stack (see the screenshot below)
*/
moar(15);

When your first statement of function call var moar = foo(5) is executed moar variable will be function bar(c){var d=30;return boop(x+a+b+c+d);

check the snippet for understanding

 var x = 10; function foo(a) { var b = 20; function bar(c) { var d = 30; return boop(x + a + b + c + d); } return bar; } var moor=foo(10); console.log(moor); 

2.After this statement moar(15),your are actually passing 15 to the bar method

It will execute bar method with c as 15. Now this function would return boop(80) which would just be -80

 var x = 10; function foo(a) { var b = 20; function bar(c) { var d = 30; return boop(x + a + b + c + d); } function boop(e) { return e * -1; } return bar; } var moar = foo(5) console.log(moar(15)); 

Hope it helps

moar(15) passes 15 into bar which gets copied into parameter c .

The // Closure comment is misleading because it is more useful to think of the closure being configured at the point of declaration of a function.

The reality is that the pointer to the outer lexical environment is configured when a function object is instantiated, and then this pointer is then copied to the execution context associated with any invocations of said function object.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM