2017-06-24 3 views
-2

In meinem folgenden Code, wenn ich nicht setzen (var i = 0 ...) in der for-Schleife habe ich eine Endlosschleife.nicht setzen (var i = 0) verursacht Endlosschleife

function steamrollArray(arr) { 
var newArr = []; 
for (i = 0; i < arr.length; i++) { 
    if (Array.isArray(arr[i])) { 
    newArr = newArr.concat(steamrollArray(arr[i])); 
    } else { 
    newArr.push(arr[i]); 
    } 
} 
return newArr; 
} 

steamrollArray([1, [], [3, [[4]]]]); 

Kann mir bitte jemand erklären warum?

+0

Simillar [** Problem **] zu vermeiden (https://stackoverflow.com/questions/44731704/javascript-for-loop -fori-0-i-3-i-terminiert-zu-früh-ohne-Verwendung). In diesem Fall endet die Schleife eher vorzeitig als Schleife unendlich (aber beide Probleme sind gleich). –

+0

globale Variablen ftw! Definieren Sie immer Ihre Variablen. – epascarello

+0

danke allen für die schnellen Antworten. Ich werde dann immer meine Variablen deklarieren. –

Antwort

1

Wenn Sie keine Variable mit dem Schlüsselwort var in der Funktion deklarieren, wird sie als globale Variable gezählt.

Ich gehe davon aus, dass in Ihrer steamrollArray Funktion können Sie auch i Nutzung und Veränderung ist Wert, so dass er die arr.length passieren, wenn es von der Funktion zurückgegeben und jetzt ist es größer dann arr.length und die Schleife endet nie.

immer mit var in Funktionen declare variabled, es auch eine gute pratice gloval variabled

+0

vielen dank. Ich werde das nächste Mal nicht vergessen. –

+0

Keine Notwendigkeit, irgendetwas anzunehmen ... der ganze Code ist genau dort in Frage – charlietfl

+0

oder eher mit 'Let', wenn Sie die Variable außerhalb der Schleife nicht benötigen. Dies hilft mit Speicher – Luca

Verwandte Themen