1

このように繰り返しごとに間隔を置いて1から10までの番号を出力するforループを書きたい

どうすれば達成できますか?sleep() setInterval() setTimeout(") を試してみましたが、機能する解決策が見つからないようです。可能であれば、純粋な Javascript のみを使用してこれを行いたいと思います。

function abc(){
    for(i=1;i<=10;i++){
        document.write(i+"<br>");
        sleep(1000);
    }
}
4

3 に答える 3

3

質問に答えるには、スリープ関数のようなものを取得するには、ヘルパー関数としてこのようなものを書くだけです

function sleep(dur) {
 var d = new Date().getTime() + dur;
  while(new Date().getTime() <= d ) {
    //Do nothing
  }

}

console.log(new Date().getTime())
     sleep(1000)

 console.log(new Date().getTime())

次に、次のように繰り返しごとに関数を呼び出すことができますsleep

function abc(){
    for(i=1;i<=10;i++){
        document.write(i+"<br>");
        sleep(1000);
    }
}

ただしsleep、この時点でブラウザがフリーズすることに注意してください。定期的に sth を実行したいだけの場合、この種の動作は実際には望ましくありません。

window.setIntervalそのような場合にあなたが望むものになるでしょう

    function abcd(i){
       document.write(i + "<br>")
    }


function repeatedTimeout(func,times,duration) {
    var args = Array.prototype.slice.call(arguments).splice(3);
    var i = 0;
    args.push(i)
    var wrap = function () {
     if(args[args.length - 1] >= times)
       window.clearInterval(wrap)
      else {

         func.apply(this,args)
         args[args.length - 1]++
       }
    }
    window.setInterval(wrap,duration)
}
repeatedTimeout(abcd,10,1000)

これは、Browers をフリーズすることなく、1000 ミリ秒ごとに 10 回呼び出すことになります。

JSBinはこちら

アップデート

本当に for ループである必要がある場合は、私にとって意味があるかどうかに関係なく、このようなことを行うことができます

for (var i = 0; i <= 10 ; i++) {
  window.setTimeout(
    (function (i){ 
      return function() {
        document.write(i + "<br>")
      }
    })(i),i * 1000)
  }

この場合、別のJSBin を用意します

これはループで呼び出さwindow.setTimeoutれ、タイムアウトとしてタイムアウトの倍数が呼び出されますが、これは機能しますが、コメントに投稿したフィドルで既に行ったように使用することをお勧めしますforisetInterval

于 2012-12-17T12:14:52.247 に答える
2

ブラウザーでの JavaScript のほとんどが非同期 (およびシングル スレッド) の性質のためsleep()、 のような構成要素は適していません。

を使用setTimeout()して汎用関数を記述して、ループを実行し、x ミリ秒間隔ごとに実行する関数を渡すことができます。少なくとも、コードを実行できる再利用可能なコンテナーが必要です。

function loopn(n, fn, delay)
{
    if (n > 0) {
        fn();
        if (n > 1) {
            setTimeout(function() {
                loopn(n - 1, fn, delay);
            }, delay);
        }
    }
}

loopn(10, function() {
    console.log('hello there');
}, 1000);
于 2012-12-17T12:47:39.337 に答える
0

ループを再帰関数に分解しsetTimeout、一時停止を実装するために使用できます。

var i = 0;
var limit = 10;

function loop(){
    console.log(i);
    i++;
    if(i < limit)
    {

        setTimeout(loop, 100);
    }
}
loop();
​
于 2012-12-17T12:07:08.750 に答える