logic - Can someone explain this JavaScript auto executing function? -
var foo = (function(){ var x = 0; return function(){return x++;}; })() why var x = 0 expression runs once biggest misunderstanding this.
your code:
var foo = (function(){ var x = 0; return function(){return x++;}; })() is equivalent code:
function f(){ var x = 0; return function(){return x++;}; } var foo = f(); it's easy see, when break this, function f() called once. defines x, , returns new function defined inside local scope of f. new function called "anonymous function" (meaning has no name) or "closure". in truth, all functions in javascript "closures" -- whether or not named. term "closure" means function retains access variables defined in parent function's scope -- after parent function has exited.
so now, foo contains new function (the closure) returned f. can call foo() many times -- , each time do, x returned , post-incremented. since x exists in closure's parent scope, value persist across multiple calls closure.
what's more... no other code has access x once f() has exited -- means x "private data" of closure. pretty neat huh?
Comments
Post a Comment