2017-07-26 17 views
0

関数呼び出しのエントリのため、スクリプトで 'Hello'、次に 'Good Bye'を出力する必要があります。しかし、一度だけ印刷します。どうして? ここでは何が間違っています。引数を使用した再帰メソッド

PD:これで動作しません。それはそれは(終わることはありません)無限ループであった最初、私は再帰呼び出しライン

<html> 
<head> 
</head> 
<body> 
<script type="text/javascript"> 
    function writing(i,first,second) { 
     len=arguments.length; 
     if (i<=len) { 
      current=arguments[i]; 
      c=0; 
      inter=setInterval(function() { 
        if (c>=current.length) { 
         clearInterval(inter); 
        } else { 
         field=document.getElementById('div1'); 
         field.innerHTML+=current[c]; 
         c+=1; 
        } 
       },200); 
     } 
     i<len?writing(i+1,first,second):writing(i=0,first,second);   
    } 
    writing(1,'Hello','Good bye'); 
</script> 
<div id="div1"></div> 
</body> 

+3

聖行方不明 'var'宣言、バットマン! 'var'(または' let'または 'const')キーワードを省略すると、変数がグローバルスコープ(この場合は' window')で宣言され、あらゆる種類の潜在的な命名汚染とクロストークが発生します。あなたがそのようなことをするのを助けるためにリンターを使用する習慣に入るのがベストです。 –

+0

私は問題を減らしました。これで 'Undefined'、' Hello'、 'Goodbye'というランダムなメッセージが表示されます。キャラクター別に実行するsetInterval時間の無関係なぜですか? – gAbad

答えて

1

コメント場合、コードと非常に多くの問題がありません、二変数宣言、およびその他のでした...

ここで私はスニペットを添付しました。あなたが探しているのであれば、実行して確認してください。

要件を満たすためにsetTimeoutを追加する必要があります。

var interval_counter = 0; 
 

 
function writing(i, first, second) { 
 
    var len = arguments.length; 
 
    if (i != 0 && i <= len) { 
 
     var current = arguments[i]; 
 
     var c = 0; 
 
     setTimeout(function() { 
 
      var inter = setInterval(function() { 
 
       if (c >= current.length) { 
 
        clearInterval(inter); 
 
       } else { 
 

 
        field = document.getElementById('div1'); 
 
        field.innerHTML += current[c]; 
 
        c += 1; 
 
       } 
 
      }, 200); 
 
     }, 200 * interval_counter); 
 
     interval_counter = interval_counter + current.length; 
 
     i < (len - 1) ? writing(i + 1, first, second) : writing(i = 0, first, second); 
 
    } else { 
 
     return false; 
 
    } 
 

 
} 
 
writing(1, 'Hello', 'Good bye');
<div id="div1"></div>

+0

そうです。ありがとう。私は本当にJavaScriptの基礎を深く研究しなければならないだろう。 – gAbad

関連する問題