setTimeout
を使用して簡単なコードを記述しようとしていますが、setTimeout
は想定されている時間だけ待機せず、コードはすぐに実行されます。私は何を間違えていますか?
setTimeout(testfunction(), 2000);
関数をすぐに呼び出して、その戻り値をスケジュールしています。
使用する:
setTimeout(testFunction, 2000);
^
注意:括弧はありません。
括弧を削除します
setTimeout(testfunction(), 2000);
関数にパラメーターを送信する場合は、目的の関数を呼び出す匿名関数を作成できます。
setTimeout(function() {
testfunction('hello');
}, 2000);
編集
誰かが、setTimeoutの最初のパラメーターとして文字列を送信することを提案しました。これに従わず、setTimeoutの最初のパラメーターとして文字列を送信しないことをお勧めします。eval関数が使用されるためです。これは悪い習慣であり、可能であれば避けるべきです。
テスト関数名の後の括弧を削除します。
setTimeout(testfunction, 2000);
その理由は、setTimeoutの最初の引数は、関数の戻り値ではなく、関数参照である必要があるためです。コードでは、testfunction
がすぐに呼び出され、戻り値がsetTimeoutに送信されます。
あなたは答えを持っているかもしれませんが、私は原因と解決策を説明しています。必要な時間が経過した後に関数を呼び出すには、2つの方法があります。
1。 setTimeout( "FUNC_NAME() '、TIME_IN_MS);
ここで、二重引用符で囲まれたFUNC_NAMEは、TIME_IN_MSミリ秒後に呼び出したい元の関数です。これは、引用符を付けないとJavaスクリプトが解釈されている間、関数がすぐに実行され、目的が無効になるためです。インタプリタにステートメントをスキップさせるには引用符を付ける必要がありますここに。
2。 setTimeout(function(){FUNC_NAME()}、TIME_IN_MS);
ここでは、時間を評価するのではなく、特定の時間後にifを実行するようにインタープリターに指示する匿名関数が作成されます。
ありがとうshaILU