【发布时间】:2012-03-23 00:27:53
【问题描述】:
我在 MSIE 中有以下 javascript:
setTimeout(myFunction, 1000, param );
这似乎适用于除 Internet Explorer 之外的所有浏览器。参数只是没有被转发到函数。查看调试器,它是未定义的。
【问题讨论】:
-
只使用匿名函数...
标签: javascript internet-explorer settimeout
我在 MSIE 中有以下 javascript:
setTimeout(myFunction, 1000, param );
这似乎适用于除 Internet Explorer 之外的所有浏览器。参数只是没有被转发到函数。查看调试器,它是未定义的。
【问题讨论】:
标签: javascript internet-explorer settimeout
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);
【讨论】:
param 是原始的param 变量。顶部的param 是自调用函数的局部变量。中间的param 解析为顶部的param。
Internet Explorer 不允许您传递这样的参数。您必须通过回调函数显式执行此操作:
setTimeout(function(){
myFunction(param);
}, 1000);
引用MDN:
请注意,在第一种语法中将附加参数传递给函数在 Internet Explorer 中不起作用。
【讨论】:
看看http://www.makemineatriple.com/2007/10/passing-parameters-to-a-function-called-with-settimeout
看起来你需要这样的东西:
setTimeout(function(){ myFunction(param) }, 1000);
【讨论】:
这不是参数。显然,最后一个参数表示脚本语言。
改用匿名函数:
setTimeout(function() {
myFunction(param);
}, 1000);
【讨论】:
使用匿名函数:
setTimeout(function() { myFunction(param) }, 1000);
【讨论】:
这个怎么样:
setTimeout(function(){
myFunction(param);
}, 1000);
【讨论】:
你可以使用闭包:
setTimeout(function(){myFunction(param)}, 1000);
【讨论】: