web-dev-qa-db-ja.com

setTimeout Internet Explorer

MSIEには次のJavaScriptがあります。

setTimeout(myFunction, 1000, param );

これは、Internet Explorerを除くすべてのブラウザーで機能するようです。パラメータは関数に転送されません。デバッガを見ると、未定義です。

22
clamp

Internet Explorerのparamは、myFunctionのコードがJScript、JavaScript、またはVBscriptかどうかを指定します 参照: [〜#〜] msdn [〜#〜]。他のブラウザのようには動作しません。

以下が機能します:

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

前の行は、FirefoxなどのsetTimeoutを正確に模倣したものではありません。param変数に対する後の更新の影響を受けずに変数を渡すには、次を使用します。

setTimeout( (function(param) {
    return function() {
        myFunction(param);
    };
})(param) , 1000);
38
Rob W

Internet Explorerでは、そのようなパラメーターを渡すことはできません。コールバック関数から明示的に行う必要があります。

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

[〜#〜] mdn [〜#〜] からの引用:

最初の構文で関数に追加のパラメーターを渡しても、Internet Explorerでは機能しないことに注意してください。

4
Joseph Silber

http://www.makemineatriple.com/2007/10/passing-parameters-to-a-function-called-with-settimeout をご覧ください。

次のようなものが必要になるようです:

setTimeout(function(){ myFunction(param) }, 1000);
2
mrmonroe

それはパラメーターではありません。どうやら、その最後の引数はスクリプト言語を示しています。

代わりに無名関数を使用してください:

setTimeout(function() {
  myFunction(param);
}, 1000);
1
Blender

無名関数を使用します。

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

これはどう:

setTimeout(function(){
    myFunction(param);
}, 1000);
1
papaiatis

あなたはクロージャーを使うことができます:

setTimeout(function(){myFunction(param)}, 1000);
1
Vikram