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); |