I have the following function
makeStopwatch that I am trying to work through to 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
I console.log the calls to stopwatch1
and stopwatch2 I get 0 returned each
time respectively.
As I understand
the intended functionality of makeStopwatch the variable
elapsed would be 0 if returned by the
inner function stopwatch. The inner function
increase increments the variable
elapsed. Then setInterval calls
increase after a delay of 1 second. Finally,
stopwatch is returned again this time with the updated value
which is expected to be
1.
But this doesn't
work because inside makeStopwatch, the inner
stopwatch, increase, and
setInterval functions are all in independent scopes of one
another?
How can I revise this to work as I
understand it so that elapsed is incremented and that value is
closed over and saved so that when I assign makeStopwatch to
variable stopwatch1 and call
stopwatch1 the updated value is returned?
No comments:
Post a Comment