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


Posted in Javascript onMay 25, 2011
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 
) 
} 
} 
); 
}
Javascript 相关文章推荐
window.onbeforeunload方法在IE下无法正常工作的解决办法
Jan 23 Javascript
jquery与google map api结合使用 控件,监听器
Mar 04 Javascript
JavaScript 盒模型 尺寸深入理解
Dec 31 Javascript
推荐10个2014年最佳的jQuery视频插件
Nov 12 Javascript
jQuery中:not选择器用法实例
Dec 30 Javascript
JS实现自适应高度表单文本框的方法
Feb 25 Javascript
jQuery实现点击按钮文字变成input框点击保存变成文字
May 09 Javascript
JavaScript来实现打开链接页面的简单实例
Jun 02 Javascript
深入浅析AngularJS中的一次性数据绑定 (bindonce)
May 11 Javascript
vue+element tabs选项卡分页效果
Jun 29 Javascript
vue父子组件间引用之$parent、$children
May 20 Javascript
JS中箭头函数与this的写法和理解
Jan 14 Javascript
IE6/7/8/9不支持exec的简写方式
May 25 #Javascript
25个优雅的jQuery Tooltip插件推荐
May 25 #Javascript
在chrome浏览器中,防止input[text]和textarea在聚焦时出现黄色边框的解决方法
May 24 #Javascript
javascript中String类的subString()方法和slice()方法
May 24 #Javascript
js中关于String对象的replace使用详解
May 24 #Javascript
基于jQuery的让非HTML5浏览器支持placeholder属性的代码
May 24 #Javascript
capacityFixed 基于jquery的类似于新浪微博新消息提示的定位框
May 24 #Javascript
You might like
遭遇php的in_array低性能问题
2013/09/17 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
[原创]js与自动伸缩图片 自动缩小图片的多浏览器兼容的方法总结
2007/03/12 Javascript
学习jquery必备 api中英文对照的chm手册 下载
2007/05/03 Javascript
分享14个很酷的jQuery导航菜单插件
2011/04/25 Javascript
解决json日期格式问题的3种方法
2014/02/02 Javascript
jQuery中hide()方法用法实例
2014/12/24 Javascript
jquery实现在光标位置插入内容的方法
2015/02/05 Javascript
动态加载js、css的实例代码
2016/05/26 Javascript
使用Bootstrap框架制作查询页面的界面实例代码
2016/05/27 Javascript
Javascript中常用类型的格式化方法小结
2016/12/26 Javascript
angular4 共享服务在多个组件中数据通信的示例
2018/03/30 Javascript
Angular父子组件通过服务传参的示例方法
2018/10/31 Javascript
vue自动路由-单页面项目(非build时构建)
2019/04/30 Javascript
javascript操作元素的常见方法小结
2019/11/13 Javascript
利用vue3+ts实现管理后台(增删改查)
2020/10/30 Javascript
[01:03:18]DOTA2-DPC中国联赛 正赛 RNG vs Dynasty BO3 第一场 1月29日
2021/03/11 DOTA
python基础教程之简单入门说明(变量和控制语言使用方法)
2014/03/25 Python
跟老齐学Python之永远强大的函数
2014/09/14 Python
Python对文件操作知识汇总
2016/05/15 Python
python实现中文转换url编码的方法
2016/06/14 Python
TensorFLow用Saver保存和恢复变量
2018/03/10 Python
python3学生名片管理v2.0版
2018/11/29 Python
Django中提供的6种缓存方式详解
2019/08/05 Python
opencv3/C++实现视频读取、视频写入
2019/12/11 Python
基于python及pytorch中乘法的使用详解
2019/12/27 Python
Tensorflow 使用pb文件保存(恢复)模型计算图和参数实例详解
2020/02/11 Python
python对批量WAV音频进行等长分割的方法实现
2020/09/25 Python
教书育人演讲稿
2014/09/11 职场文书
大学生万能检讨书范例
2014/10/04 职场文书
组织生活会表态发言材料
2014/10/17 职场文书
试用期自我评价范文
2015/03/10 职场文书
办公室日常管理制度
2015/08/04 职场文书
安全生产隐患排查制度
2015/08/05 职场文书
MySQL 全文检索的使用示例
2021/06/07 MySQL
windows server2012 R2下安装PaddleOCR服务的的详细步骤
2022/09/23 Servers