【问题标题】:setTimeout Internet Explorer设置超时 Internet Explorer
【发布时间】:2012-03-23 00:27:53
【问题描述】:

我在 MSIE 中有以下 javascript:

setTimeout(myFunction, 1000, param );

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

【问题讨论】:

  • 只使用匿名函数...

标签: javascript internet-explorer settimeout


【解决方案1】:

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

【讨论】:

  • @clamp 底部的param 是原始的param 变量。顶部的param 是自调用函数的局部变量。中间的param 解析为顶部的param
  • 谢谢!现在似乎所有浏览器都可以正常工作,只是一些后处理工具(如 jshint 和 google 闭包编译器)抱怨这是无效的语法。但我想,这应该是另一个问题。
  • Closure CompilerJSHint 中单独使用sn-p 没有收到任何警告/错误。
  • 不得不提的是,参数是这样的数组:[a,b]
  • @clamp 这还不够。如果您真的想解决这个(有趣的?)问题,请不要犹豫,发布一个新问题,包括相关代码来演示您的案例。
【解决方案2】:

Internet Explorer 不允许您传递这样的参数。您必须通过回调函数显式执行此操作:

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

引用MDN:

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

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

      改用匿名函数:

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

      【讨论】:

        【解决方案5】:

        使用匿名函数:

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

        【讨论】:

          【解决方案6】:

          这个怎么样:

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

          【讨论】:

            【解决方案7】:

            你可以使用闭包:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-05-17
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-01-02
              相关资源
              最近更新 更多