3

以下を使用して、JavaScriptを数秒間一時停止します。

 setTimeout(start_countdown(),3000);

それは機能せず、関数は秒に関係なく呼び出されます。ただし、次の関数は機能しますが、関数を使用しません。

setTimeout(alert('hi'),3000);

どうすればこれを解決できますか?

4

4 に答える 4

11

関数参照を渡す必要があります。関数の戻り値を渡しています。

違いは次のとおりです。1つは実行したい関数の青写真であり、もう1つは関数をすぐに実行し、その戻り値をに渡すことを意味しますsetTimeout

setTimeout(start_countdown, 3000);

単に名前付き関数を呼び出すよりも複雑なことをしたい場合、または名前付き関数にパラメーターを渡したい場合は、代わりに匿名関数をタイムアウトに渡して、その中で関数を呼び出す必要があります。

setTimeout(function() {
    start_countdown(/* possible params */);
    /* other code here as required */
}, 3000);
于 2012-08-01T10:15:32.903 に答える
3

パラメータを渡す必要がない場合は使用しないでください()

setTimeout(start_countdown,3000);

関数をラップする必要がある場合

setTimeout(function(){start_countdown(parameter)},3000);
于 2012-08-01T10:15:44.580 に答える
1

代わりに書く

setTimeout(start_countdown, 3000);

両親がいなければ()
、2番目の例は次のように書くこともできます

setTimeout(function() { alert('hi'); }, 3000);
于 2012-08-01T10:13:26.530 に答える
0

異なるブラウザでは、異なる方法で動作します。IEでは、匿名関数を使用してパラメーターをコールバックに渡す必要があります。

setTimeout(function(){alert('hi')}、3000);

于 2012-08-01T10:16:08.860 に答える