dinsdag 3 januari 2017

Javascript Lexical scope problems and solution

var i, f = [ ], base = 1;
for (i = 0; i < 10; i++) {
    f.push(function() { return base + i; });
}
alert(f[0]());

Resultaat: -> 11


Nesten van functions maakt niet uit:

var i,
    f = [ ],
    base = 1;
for (i = 0; i < 10; i++) {
    f.push(function() { return function() { return base + i; } });
}
alert(f[0]()());

-> 11

Solution:
De enige oplossing is de volgende:

var i,
    f = [ ],
    base = 1;
for (i = 0; i < 10; i++) {
    f.push((function(base, i) {
       return function() { return base + i; }
    })(base, i));
}
alert(f[0]());

-> 1

a must read on the subject: https://spin.atomicobject.com/2014/10/20/javascript-scope-closures/

Geen opmerkingen:

Een reactie posten