首先需要明确,setTimeout
和setInterval
函数的第三个以上参数在所有现代浏览器和IE9以上版本均被支持。但是,在IE9及以下版本中,第三个以上参数并不会被当做函数的参数传递进去,而是被当做全局对象属性传递进去。
解决方法是在第三个以上参数中传入一个字符串类型的函数参数,在函数内通过eval
方法执行即可。
以下是简单的示例说明:
- 传递一个字符串函数作为第三个参数:
setTimeout(function(a, b){
console.log(a + b);
}, 1000, 1, 2);
在IE9及以下版本中,该代码会输出undefined
,而在其他现代浏览器中将会输出3
。
为了兼容IE9及以下版本,我们可以改写为:
setTimeout("function(a, b){ console.log(a + b); } (1, 2)", 1000);
此时在所有浏览器上都将输出3
。
- 使用闭包传递参数:
(function(){
var a = 1, b = 2;
setTimeout(function(){
console.log(a + b);
}, 1000);
})();
该代码在所有现代浏览器和IE9及以上版本中均能正常工作。而在IE9及以下版本中,我们可以使用闭包来模拟传递参数:
(function(){
var a = 1, b = 2;
setTimeout(function(){
eval("function(){ console.log(" + (a + b) + "); }");
}, 1000);
})();
以上两种示例都是为了解决IE9及以下版本中setTimeout
和setInterval
函数第三个以上参数的兼容性问题。建议在编写代码时使用第一种示例的方式,或者使用函数闭包方式传递参数。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:仅IE不支持setTimeout/setInterval函数的第三个以上参数 - Python技术站