0

関数が 3 秒後よりも繰り返し呼び出されるのはなぜですか?

<button onclick="myFunction()">Try it</button>

<script>
    function myFunction()
    {
        alert("hello");
        setTimeout(myFunction(),3000);
        // setTimeout(function(){ alert("Hello") }, 3000);
     }
</script>
4

3 に答える 3

5

すぐに呼び出しmyFunctionて、その戻り値 ( undefined) をsetTimeout

を削除して()、関数を呼び出す代わりに渡すようにします。

変化する:

setTimeout(myFunction(),3000);

に:

setTimeout(myFunction,3000);
于 2013-04-17T12:37:07.170 に答える
3

このコードを見てください

setTimeout(myFunction(),3000);

()後は、myFunctionmyFunction を呼び出して、返されたものを保存します。3秒後にそれを呼び出します。

あなたがする必要があるのは、関数を呼び出すのではなく、関数への参照を保存することです。したがって、 をドロップする必要があります()

コードは次のようにする必要があります

setTimeout(myFunction,3000);

変更すると、[OK] をクリックした後、3 秒ごとにアラートが表示され、表示されているようなアラートの洪水ではなくなります。

于 2013-04-17T12:37:56.290 に答える
1

setTimeout を使用する場合は、コールバックを呼び出すのではなく、コールバック関数を指定する必要があります。XD 代わりに:

setTimeout(myFunction(), 3000);

あなたは書く必要があります:

setTimeout(myfunction, 3000);

最後に () を追加すると、関数が呼び出されることに注意してください。あなたの例では、無限ループを実行しています。

于 2013-04-17T12:39:41.047 に答える