2016-05-22 3 views
1

これはCodecademyのJavascriptのレッスン「あなたの名前のためのテキスト検索」からのものです。以下の作品:これらの違いは何ですか?1つのクラッシュを引き起こすForループ?

しかし
var text = "My name is Zorak. Everyone calls me Zorak."; 
var myName = "Zorak"; 
var hits = []; 

for (i=0; i < text.length; i++){ 
    if (text[i] === myName[0]) { 
     for (var j = i; j < i + myName.length; j++) { 
      hits.push(text[j]) 
     }  
    } 
} 

、私はj + myName.lengthi + myName.lengthを置き換え、それがクラッシュです。フルで:私はこれを実行すると

var text = "My name is Zorak. Everyone calls me Zorak."; 
var myName = "Zorak"; 
var hits = []; 

for (i=0; i < text.length; i++){ 
    if (text[i] === myName[0]) { 
     for (var j = i; j < j + myName.length; j++) { 
      hits.push(text[j]) 
     }  
    } 
} 

私は私がループ内にconsole.logマーカーを配置するとき、それはちょうどことを除いて、無限ループで立ち往生だと信じるように私を導いた、すべてのエラーを取得していませんよそれは何も印刷されません。

なぜクラッシュするのですか?

+0

あなたはその変更から何を期待していますか?無作為に変更するコードは、決して賢明な結果につながることはまれです... –

+1

無限ループです。 – jsejcksn

+0

@AlexeiLevenkov私はそれがクラッシュしないように期待しています。 「j stephen

答えて

1

無限ループなのでクラッシュします。ここ

それらの値に変換する静的変数と、2番目の例である:によって置き換え

for (var j = i; j < j + myName.length; j++) { 

又はmyName.length有する:

var text = "My name is Zorak. Everyone calls me Zorak."; 
var myName = "Zorak"; 
var hits = []; 

for (i = 0; i < 42; i++) { 
    if (text[i] === 'Z') { 
    for (var j = i; j < j + 5; j++) { 
     hits.push(text[j]); 
    } 
    } 
} 

具体的には、あなたの内for条件は、無限ループを引き起こしていますその価値、5:

for (var j = i; j < j + 5; j++) { 

jは常にj + 5より小さくなるため、ループは終了せずに終了し、クラッシュするまでメモリを消費します。

+0

「jはいつもj + 5よりも小さくなるでしょう」 - それは明白ですが、あなたがこのように置くまでは私を叩かなかったのです! – stephen

2
j < j + myName.length; j++ 

jは決して終了しません。あなたはそれを増分していますが、常にそれ自身よりも大きい数字と比較します(myName.length> 0であると仮定します)。ループの条件は常に満たされ、永久に実行されます。

関連する問題