198

jQuery に似た JavaScript メソッドはありますdelay()wait()(スクリプトの実行を特定の時間遅らせるため)?

4

15 に答える 15

244

他のみんなが言ったことに追加するだけですsetTimeout:将来、パラメータを使用して関数を呼び出したい場合は、匿名関数呼び出しを設定する必要があります。

後で呼び出すには、関数を引数として渡す必要があります。事実上、これは名前の後ろに角かっこがないことを意味します。以下はアラートを一度に呼び出し、「Helloworld」を表示します。

var a = "world";
setTimeout(alert("Hello " + a), 2000);

これを修正するには、関数の名前を入力するか(Flubbaが行ったように)、無名関数を使用できます。パラメータを渡す必要がある場合は、無名関数を使用する必要があります。

var a = "world";
setTimeout(function(){alert("Hello " + a)}, 2000);
a = "Stack Overflow";

しかし、そのコードを実行すると、2秒後にポップアップに「HelloStackOverflow」と表示されることに気付くでしょう。これは、変数aの値がこの2秒間に変更されたためです。2秒後に「Helloworld」と表示するには、次のコードスニペットを使用する必要があります。

function callback(a){
    return function(){
        alert("Hello " + a);
    }
}
var a = "world";
setTimeout(callback(a), 2000);
a = "Stack Overflow";

2秒待ってから、「Helloworld」がポップアップ表示されます。

于 2008-08-24T10:01:16.930 に答える
193

以下があります。

setTimeout(function, milliseconds);

関数が実行されるまでの時間を渡すことができる関数。

参照:ウィンドウsetTimeout()メソッド

于 2008-08-24T05:18:18.467 に答える
39

少し拡張するだけです...setTimeout呼び出しで直接コードを実行できますが、@ patrickが言うように、通常はこのようなコールバック関数を割り当てます。時間はミリ秒です

setTimeout(func, 4000);
function func() {
    alert('Do stuff here');
}
于 2008-08-24T08:53:14.987 に答える
27

本当にブロッキング (同期)delay関数が必要な場合は (なんとしてでも)、次のようにしてみませんか。

<script type="text/javascript">
    function delay(ms) {
        var cur_d = new Date();
        var cur_ticks = cur_d.getTime();
        var ms_passed = 0;
        while(ms_passed < ms) {
            var d = new Date();  // Possible memory leak?
            var ticks = d.getTime();
            ms_passed = ticks - cur_ticks;
            // d = null;  // Prevent memory leak?
        }
    }

    alert("2 sec delay")
    delay(2000);
    alert("done ... 500 ms delay")
    delay(500);
    alert("done");
</script>
于 2014-06-30T11:03:20.430 に答える
15

setTimeoutを使用してコールバック関数を渡す必要があります。javascript で sleep を使用できない理由は、ページ全体がその間何もできないようにするためです。良い計画ではありません。Javascript のイベント モデルを使用して、満足してください。戦わないで!

于 2008-08-24T05:14:30.800 に答える
14

window.setInterval()を使用して、一定の間隔でいくつかのコードを繰り返し実行することもできます。

于 2008-08-24T05:29:51.153 に答える
11

以前のコメントに追加して、次のことを言いたいと思います。

JavaScriptのsetTimeout()関数は、スクリプト自体の実行を一時停止するのではなく、後でコードを実行するようコンパイラに指示するだけです。

JavaScript に組み込みの実行を実際に一時停止できる関数はありません。Date()ただし、関数を使用して必要な時間間隔を追加することにより、時間に達するまで無条件ループのようなことを行う独自の関数を作成できます。

于 2012-01-09T02:52:18.743 に答える
11

遅延のみをテストする必要がある場合は、これを使用できます。

function delay(ms) {
   ms += new Date().getTime();
   while (new Date() < ms){}
}

そして、2 秒間遅らせたい場合は、次のようにします。

delay(2000);

ただし、生産には最適ではないかもしれません。詳細はコメントで

于 2014-12-20T01:13:19.267 に答える
5

簡単な返信は次のとおりです。

setTimeout(
    function () {
        x = 1;
    }, 1000);

上記の関数は 1 秒 (1000 ミリ秒) 待機してから x を 1 に設定します。明らかにこれは例です。無名関数内では何でもできます。

于 2017-01-21T23:08:57.393 に答える
1

遅延機能:

/**
 * delay or pause for some time
 * @param {number} t - time (ms)
 * @return {Promise<*>}
 */
const delay = async t => new Promise(resolve => setTimeout(resolve, t));

async関数内での使用法:

await delay(1000);
于 2019-08-14T15:05:15.187 に答える
1

遅延を使用して関数を呼び出す最も簡単なソリューションは次のとおりです。

function executeWithDelay(anotherFunction) {
    setTimeout(anotherFunction, delayInMilliseconds);
}
于 2019-02-03T03:00:26.437 に答える