setTimeout Internet Explorer

时间:2012-03-05 14:24:21

标签: javascript internet-explorer settimeout

我在MSIE中有以下javascript:

setTimeout(myFunction, 1000, param );

这似乎适用于除Internet Explorer之外的所有浏览器。 param只是没有转发到该函数。看看调试器,它是未定义的。

7 个答案:

答案 0 :(得分:35)

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);

答案 1 :(得分:3)

Internet Explorer不允许您传递这样的参数。您必须从回调函数中明确地执行此操作:

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

引自MDN

  

请注意,在第一种语法中将其他参数传递给函数在Internet Explorer中不起作用。

答案 2 :(得分:1)

查看http://www.makemineatriple.com/2007/10/passing-parameters-to-a-function-called-with-settimeout

看起来你需要这样的东西:

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

答案 3 :(得分:0)

这不是参数。显然,最后一个参数表示脚本语言。

改为使用匿名函数:

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

答案 4 :(得分:0)

使用匿名函数:

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

答案 5 :(得分:0)

这个怎么样:

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

答案 6 :(得分:0)

你可以使用闭包:

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