2017-06-24 12 views
-2

私の次のコードでは、forループに(var i = 0 ...)を入れないと無限ループになります。put(var i = 0)は無限ループを引き起こします

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]]]]); 

誰でも説明できますか?

+0

Simillar [**問題**](https://stackoverflow.com/questions/44731704/javascript-for-loopをvariabled -fori-0-i-3-i-terminates-too-early-without-using)である。この場合、ループは無限ループではなく早期に終了します(しかし、両方の問題は同じです)。 –

+0

グローバル変数ftw!常に変数を定義してください。 – epascarello

+0

すばらしい回答をいただき、ありがとうございました。私はいつも私の変数を宣言します。 –

答えて

1

varキーワードが関数内に宣言されていない場合は、グローバル変数としてカウントされます。

私はあなたのsteamrollArray機能であなたもiを使用して、変更が値であると仮定し、それは関数から戻ったときには、arr.lengthに合格し、今ではarr.lengthその後、大きいですし、ループが終了することはありません。

は常に機能でvarでvariabled宣言し、それはまた、glovalを避けるために良いpraticeは

+0

多くのありがとうございます。次回は忘れないよ。 –

+0

何も想定する必要はありません。すべてのコードは質問 – charlietfl

+0

にあります。ループの外側で変数を必要としない場合は、 'let'を使用してください。これはメモリに役立ちます – Luca

関連する問題