JavaScript-js中settimeout第三个参数验证

发布于 2017-01-25 22:31:22 字数 253 浏览 1137 评论 1

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,不确定数字,每次都会变。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

归属感 2017-07-09 22:36:54

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.

可以用一下方法解决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);

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文