diff --git a/_posts/en/javascript/2017-06-14-closures-inside-loops.md b/_posts/en/javascript/2017-06-14-closures-inside-loops.md index 643c692f..5b7da5aa 100644 --- a/_posts/en/javascript/2017-06-14-closures-inside-loops.md +++ b/_posts/en/javascript/2017-06-14-closures-inside-loops.md @@ -18,12 +18,12 @@ If you ever come across the likes of var funcs = []; for (var i = 0; i < 3; i++) { funcs[i] = function() { - console.log("i value is" + i); + console.log("i value is " + i); }; } -for (var i = 0; i < 3; i++) { - funcs[i](); +for (var k = 0; k < 3; k++) { + funcs[k](); } ``` @@ -38,9 +38,9 @@ i value is 2 Doesn't match the actual output which will resemble ``` -i value is 2 -i value is 2 -i value is 2 +i value is 3 +i value is 3 +i value is 3 ``` This is because of how the capturing mechanism of closures work and how `i` is represented internally. @@ -50,7 +50,7 @@ To solve this situation you can do as follows: ```javascript for (var i = 0; i < 3; i++) { funcs[i] = (function(value) { - console.log("i value is " + 3); + console.log("i value is " + i); })(i); } ``` @@ -60,9 +60,9 @@ Which effectively copies i by value by handing it to our closure or ```javascript for (let i = 0; i < 3; i++) { funcs[i] = function() { - console.log("i value is " + 3); + console.log("i value is " + i); } } ``` -Where `let` scopes the variable to our `for` loop and produces a new value each iteration, thus `i` will be bound to different values on our closures as expected. \ No newline at end of file +Where `let` scopes the variable to our `for` loop and produces a new value each iteration, thus `i` will be bound to different values on our closures as expected.