2009-04-28 5 views
12
setTimeout setTimeoutを使用する場合、実行するコードを文字列に入れる必要があります。

setTimeout - 文字列をコールバックに使用しないようにするには?

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

しかし、変数に参照がある関数を実行したいと思います。

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

(現実にはアラートは長めのコードですが、myGreatFunctionsetTimeoutが呼び出される他の関数のパラメータとして渡されます)

もちろん、タイムアウトが発生すると、myGreatFunctionは認識されない関数なので、実行されません。

私はjavascriptでこれをやりたいと思っていますが、そうではありません:

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

いい方法がありますか?

+4

あなたが最も確かに...実際には、あなたがNOT_ARCHIVEDのを_shouldない「のsetTimeoutを使用している場合、あなたが文字列に実行したいコードを配置する必要があります」。 –

+0

@Tomalak - はい、そうです。 Kirtanの答えに関するコメントを参照してください.../ – teedyay

+0

実際に私はそれを見ました。質問を見ることができる他の誰かのために明示したいと思っています:) –

答えて

28

あなたが任意の引数を指定してmyGreatFunctionを呼び出す必要がない場合は、あなたがsetTimeoutに関数参照を渡すことができる必要があります:

setTimeout(myGreatFunction, 1000); 

また、あなたは常に(それが評価する必要があるsetTimeoutコードを渡すことは避けるべきですコードを引用符で囲むとどうなりますか)。代わりに、匿名関数内のコードをラップ:

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

詳細についてはsetTimeout page at the Mozilla Development Centreを参照してください。

スティーブ

14

誰もあなたにそれをさせてくれないと言ったのですか?

それがない、コード -

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

は完全に有効です。

+9

母 - はい、あなたは正しいです。無関係のバグは、実際には私の関数が呼び出されていないように見えることを意味しました。これは私自身の質問に投票したいというやや恥ずかしい立場に私を残す... – teedyay

関連する問題