Here is a small snippet of code where I feel the closure function has a weird behavior ...
var arr = [5, 6, 7, 8, 9, 0];
var someFn;
arr.forEach(function(val, idx) {
if (!someFn) {
someFn = function() {
console.log(`B: ${idx} : ${val}`);
};
}
console.log(`A: ${idx} : ${val}`);
someFn();
});
The final console output is ...
A: 0 : 5 B: 0 : 5 A: 1 : 6 B: 0 : 5 A: 2 : 7 B: 0 : 5 A: 3 : 8 B: 0 : 5 A: 4 : 9 B: 0 : 5 A: 5 : 0 B: 0 : 5
I expect someFn
to process the incremental value when the forEach is processing, but it always outputs the first value which is "idx: 0, val: 5"
.
I dont think this is the right behavior because someFn
is creating a closure which encloses the variables idx
and val
and both those variables are changing in the outer function.
Appreciate if someone can kindly explain this behavior.