您好,欢迎访问一九零五行业门户网

仅IE不支持setTimeout/setInterval函数的第三个以上参数_javascript技巧

复制代码 代码如下:
settimeout(function(obj){
alert(obj.a);
}, 2000, {a:1});
即传了第三个参数,第三个参数将作为回调函数的参数obj传入。在非ie浏览器中都弹出了1。这样有个好处,即解决了回调函数的执行上下文,比如要调用某个对象的某个方法,即可以通过参数把该对象传进去。
复制代码 代码如下:
settimeout(function(obj){
obj.method();
}, 2000, obj);
当然,你还可以传多个参数给回调函数,如下
复制代码 代码如下:
settimeout(function(a, b){
alert(a);
alert(b);
}, 2000, 1,2);
这次我们传了两个参数1,2给回调函数,firefox/safari/chrome/opera中依次弹出了1,2。只要你愿意还可以传更多。
虽然除了ie不支持第三个参数外,但firefox和safari/chrome/opera之间还是有区别的
复制代码 代码如下:
settimeout(function(){
alert(arguments.length);
}, 2000, 1,2);
传了两个参数1,2给回调函数,然后alert出实参的长度
firefox : 3
safari/chrome/opera : 2
奇怪吧,明明传的是两个参数,但firefox中弹出的却是3。如果输出第三个参数会发现它是一个数字,有时还是负数。
关: http://www.w3.org/tr/window/
https://developer.mozilla.org/en/dom/window.settimeout
http://msdn.microsoft.com/en-us/library/ms536753%28v=vs.85%29.aspx 
//解决ie下settimeout传参数的bug
复制代码 代码如下:
//解决ie下settimeout传参数的bug
if(!+[1,]) {
(function(overridefun){
window.settimeout = overridefun(window.settimeout);
window.setinterval = overridefun(window.setinterval);
})(
function(originalfun){
return function(code, delay){
var args = [].slice.call(arguments, 2);
return originalfun(
function(){
if (typeof code == 'string') {
eval(code);
}
else {
code.apply(this, args);
}
},
delay
)
}
}
);
}
其它类似信息

推荐信息