12

を使用する場合setTimeout、実行するコードを文字列に入れる必要があります。

setTimeout('alert("foobar!");', 1000);

ただし、変数に参照がある関数を実行したいです。私はこれを行うことができるようにしたい:

var myGreatFunction = function() { alert("foobar!"); };
// ...
setTimeout('myGreatFunction();', 1000);

(実際には、アラートはより長いコードでありmyGreatFunction、パラメーターとして他の関数に渡され、その中でsetTimeoutが呼び出されます。)

もちろん、タイムアウトがトリガーmyGreatFunctionされると、認識された関数ではないため、実行されません。

JavaScriptでこれを実行できるようにしたいのですが、そうではありません:

setTimeout(function() { myGreatFunction(); }, 1000);

これを回避する良い方法はありますか?

4

2 に答える 2

29

引数を指定して呼び出す必要がない場合は、関数参照myGreatFunctionを渡すことができるはずです。setTimeout

setTimeout(myGreatFunction, 1000);

また、評価する必要があるコードを渡すことは常に避けるsetTimeout必要があります (これは、コードを引用符で囲んだ場合に発生します)。代わりに、無名関数でコードをラップします。

setTimeout(function() {
    // Code here...
}, 1000);

詳細については、Mozilla Development Center の setTimeout ページを参照してください。

スティーブ

于 2009-04-28T10:02:29.473 に答える
14

それがあなたにそれをさせないと言ったのは誰ですか?

それは、コード -

setTimeout(function() { myFunction(); }, 1000);

完全に有効です。

于 2009-04-28T10:02:06.510 に答える