Nils-Hero: Parameter mitgeben beim Express app.get

Beitrag lesen

Wenn man für den IE11 schreiben muss, geht es so (siehe Beispiel 4):

Beispiel 1 läuft nicht wie erwartet:

for (var x=0; x<3; x++) { 
    setTimeout(function(){ 
        console.log(x);   // 3,3,3
    }, 100);
}
console.log(x);   // 3 // unsauber

Beispiel 2: Saubere ES6 syntax, let bewirkt das erwartete Resultat und besudelt nicht den äußeren Kontext, funktioniert aber nicht im IE11:

for (let x=0; x<3; x++) { 
    setTimeout(function(){ 
        console.log(x);   // 1,2,3
    }, 100);
}
console.log(x);   // ReferenceError: x is not defined // sauber

Beispiel 3: funktioniert auch vor ES6, die anonyme Funktion bewirkt das erwartete Resultat, aber der äußere Kontext wird besudelt.

for (var x=0; x<3; x++) {
    (function(x){
        setTimeout(function(){ 
            console.log(x);   // 1,2,3
        }, 100);
    })(x);
}
console.log(x);   // 3 // unsauber

Beispiel 4: Das Wrappen in eine weitere anonyme Funktion funktioniert vor ES6 und im IE11 und der äußere Kontext bleibt sauber, aber – functionfunctionfunction:

(function(){
    for (var x=0; x<3; x++) {
        (function(x){
            setTimeout(function(){ 
                console.log(x);   // 1,2,3
            }, 100);
        })(x);
    }
})();
console.log(x);   // ReferenceError: x is not defined // sauber

Fazit: der einzige Grund var statt let/const zu verwenden ist wenn man für Pre-ES6 Browser schreiben muß.

Quellen:

Learning Advanced JavaScript, Beispiel 56

Is there any reason to use the “var” keyword in ES6?

Gruß, Nils