2017-06-24 6 views
1

私は、文字列とその文字列に現れる文字の回数を数える単一の文字を入力する関数を持っています。JavaScriptのためのブラケットは、エラーの原因となるforループですか?

function count(str, letter) { 
    var num = 0; 
    for (var i = 0; i < str.length; i++) 
    if (str.charAt(i) == letter) 
     num += 1; 
    return num; 

} 

console.log(count("BBC", "B")); 
//output 2 

これはうまく動作しますが、これはわかりやすいように時間がかかりました。

function count(str, letter) { 
    var num = 0; 
    for (var i = 0; i < str.length; i++) { 
    if (str.charAt(i) == letter) 
     num += 1; 
    return num; 
    } 
} 

console.log(count("BBC", "B")); 
//outputs 1 

なぜブラケットは、それが動作するように引き起こしている:私はそれが希望予想通りの機能が動作しない、ことを行うとき、私はいつものように、ループのために括弧を置くだけにのためのその秒針の自然こちらです?

答えて

1

なぜかっこがこのように動作する原因は何ですか?

forループブロック内にreturn文があるためです。ブロックの最後に、関数が戻ります。

function count(str, letter) { 
    var num = 0; 
    for (var i = 0; i < str.length; i++) { // block start 
     if (str.charAt(i) == letter) 
      num += 1; 
     return num;          // exit function in first loop 
    }          // block end 
} 
0

これは、中括弧(かっこは[]ある)ではありません、それはreturn文の配置です。 returnステートメントはループの最初の反復にあります(i = 0)。余分な中カッコを追加すると(下記参照)、より明白になります。

function count(str, letter) { 
    var num = 0; 
    for (var i = 0; i < str.length; i++) { 
     if (str.charAt(i) == letter) { 
      num += 1; 
     } 
     return num; // <-- This return exits the function 
    } 
} 

console.log(count("BBC", "B")); 
//outputs 1 
0

最初のreturn文はfor文の外側にありましたが、2番目のreturn文はforループの内側にありました。それが違いを生み出しました。 次のコードを試してください。

function count(str, letter) { 
     var num = 0; 
     for (var i = 0; i < str.length; i++) { 
     if (str.charAt(i) == letter) 
      num += 1; 
     } 
     return num; 
    } 

console.log(count("BBC", "B")); 
0

ループは最初の反復後に終了します。 "XBBBB ... B"で "B"の出現を取得しようとすると、0が返されます。 コードをデバッグし、角カッコを正しい位置に配置してください。 ブラウザを使用してjsコードをデバッグする方法を学びます。

関連する問題