How to access variables in another scope inside a function using closure in javascript? -
i have following function makestopwatch
trying work through better understand javascript closures:
var makestopwatch = function() { var elapsed = 0; var stopwatch = function() { return elapsed; }; var increase = function() { elapsed++; }; setinterval(increase, 1000); return stopwatch; }; var stopwatch1 = makestopwatch(); var stopwatch2 = makestopwatch(); console.log(stopwatch1()); console.log(stopwatch2());
when console.log
calls stopwatch1
, stopwatch2
0
returned each time respectively.
as understand intended functionality of makestopwatch
variable elapsed
0
if returned inner function stopwatch
. inner function increase
increments variable elapsed
. setinterval
calls increase
after delay of 1 second. finally, stopwatch
returned again time updated value expected 1
.
but doesn't work because inside makestopwatch
, inner stopwatch
, increase
, , setinterval
functions in independent scopes of 1 another?
how can revise work understand elapsed
incremented , value closed on , saved when assign makestopwatch
variable stopwatch1
, call stopwatch1
updated value returned?
var makestopwatch = function() { var elapsed = 0; // stopwatch function referenced later var stopwatch = function() { return elapsed; }; var increase = function() { elapsed++; }; // setinterval continue running , calling increase function. // not maintain access it. setinterval(increase, 1000); // returns stopwatch function reference earlier. way // can interact closure variables through function. return stopwatch; }; var stopwatch1 = makestopwatch(); // runs makestopwatch function. function *returns* // inner stopwatch function emphasized above. console.log(stopwatch1()); // stopwatch1 reference inner stopwatch function. no longer // have access elapsed variable or function increase. // `setinterval` calling `increase` still running. every // 1000ms (1 second) increment elapsed 1.
so if were put of above code console, , call console.log(stopwatch1())
sporadically, console.log number of seconds since created stopwatch.
Comments
Post a Comment