setTimeout第三个参数

setTimeout和setInterval函数的第三个参数本来只是定义语言类型,后来在非IE浏览器下支持传递参数,并且在不同浏览器下支持的不同。

原来的setTimeout函数定义:

var timeoutID = window.setTimeout(func, delay[, lang]);

在Chrome和FF下定义被修改:

var timeoutID = window.setTimeout(func, delay, [param1, param2, ...]);
var timeoutID = window.setTimeout(code, delay);
IE:不支持第三个参数。
Chrome:接受的参数=传递的参数个数。
FF:接受的参数=传递的参数个数+1。firefox官方给出的解答是:

https://developer.mozilla.org/en/DOM/window.setTimeout
Note: Gecko passes an extra parameter to the callback routine, indicating the “lateness” of the timeout in milliseconds.

要调用某个对象的某个方法,即可以通过参数把该对象传进去。

setTimeout(function(obj){
    obj.method();
}, 2000, obj);

可以用一下方法解决IE下不支持的问题:

(function(w){
//ie传入第三个参数
if(!+[1,]){//除IE外,!+[1,]都是返回false
(function(overrideFn){
w.setTimeout = overrideFn(w.setTimeout);
w.setInterval = overrideFn(w.setInterval);
})(function(originalFn){
return function(code,delay){
var args = Array.prototype.slice.call(arguments,2);
return originalFn(function(){
if(typeof code == 'string'){
eval(code);
}else{
code.apply(this,args);
}
},delay);
}
})
}
})(window);

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>