js中settimeout第三个参数验证
setTimeout(function(){
alert(arguments.length);
alert(arguments[0]);
alert(arguments[1]);
alert(arguments[2]);
}, 1000, 1,2);
chrome下弹出是正确的,2,1,2,undefined
而火狐下弹出3,1,2,不确定数字,每次都会变。
我不是毛毛
12 years, 5 months ago
Answers
setTimeout和setInterval函数的第三个参数本来只是定义语言类型,后来在非IE浏览器下支持传递参数,并且在不同浏览器下支持的不同。
原来的setTimeout函数定义:
在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.
可以用一下方法解决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);
狂热粉真可怕
answered 12 years, 5 months ago