@Chris S gab ein schönes Beispiel, das den praktischen Unterschied (und die Gefahr) zwischen var
und keine var
. Hier ist eine weitere, die ich für besonders gefährlich halte, weil der Unterschied nur in einer asynchronen Umgebung sichtbar ist, so dass er beim Testen leicht übersehen werden kann.
Wie zu erwarten, wird das folgende Snippet ausgegeben ["text"]
:
function var_fun() {
let array = []
array.push('text')
return array
}
console.log(var_fun())
Das gilt auch für den folgenden Ausschnitt (beachten Sie die fehlende let
vor array
):
function var_fun() {
array = []
array.push('text')
return array
}
console.log(var_fun())
Die asynchrone Ausführung der Datenmanipulation führt auch mit einem einzigen Executor zum gleichen Ergebnis:
function var_fun() {
array = [];
return new Promise(resolve => resolve()).then(() => {
array.push('text')
return array
})
}
var_fun().then(result => {console.log(result)})
Bei mehreren verhält es sich jedoch anders:
function var_fun() {
array = [];
return new Promise(resolve => resolve()).then(() => {
array.push('text')
return array
})
}
[1,2,3].forEach(i => {
var_fun().then(result => {console.log(result)})
})
Benutzen Sie jedoch let:
function var_fun() {
let array = [];
return new Promise(resolve => resolve()).then(() => {
array.push('text')
return array
})
}
[1,2,3].forEach(i => {
var_fun().then(result => {console.log(result)})
})