仅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 相关文章推荐
JavaScript 新手24条实用建议[TUTS+]
Jun 21 Javascript
jquery+css+ul模拟列表菜单具体实现思路
Apr 15 Javascript
js同比例缩放图片的小例子
Oct 30 Javascript
js使用心得分享
Jan 13 Javascript
基于jquery实现的树形菜单效果代码
Sep 06 Javascript
RequireJS多页面应用实例分析
Jun 29 Javascript
jQuery对checkbox 复选框的全选全不选反选的操作
Aug 09 Javascript
jQuery 移动端拖拽(模块化开发,触摸事件,webpack)
Oct 28 Javascript
微信小程序 scroll-view隐藏滚动条详解
Jan 16 Javascript
Bootstrap Tooltip显示换行和左对齐的解决方案
Oct 11 Javascript
微信小程序事件 bindtap bindinput代码实例
Aug 26 Javascript
vue keep-alive列表页缓存 详情页返回上一页不刷新,定位到之前位置
Nov 26 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教程之phpize使用方法
2014/02/12 PHP
php的declare控制符和ticks教程(附示例)
2014/03/21 PHP
php中time()与$_SERVER[REQUEST_TIME]用法区别
2014/11/19 PHP
php计算整个目录大小的方法
2015/06/19 PHP
PHP中串行化用法示例
2016/11/16 PHP
PHP基于递归实现的约瑟夫环算法示例
2017/08/27 PHP
PHP获取数组中指定的一列实例
2017/12/27 PHP
php通过header发送自定义数据方法
2018/01/18 PHP
二行代码解决全部网页木马
2008/03/28 Javascript
使用jQuery的将桌面应用程序引入浏览器
2010/11/19 Javascript
jQuery EasyUI API 中文文档 - Documentation 文档
2011/09/29 Javascript
js获取ajax返回值代码
2014/04/30 Javascript
AngularJS ng-blur 指令详解及简单实例
2016/07/30 Javascript
原生node.js案例--前后台交互
2017/02/20 Javascript
基于BootStrap multiselect.js实现的下拉框联动效果
2017/07/28 Javascript
关于Google发布的JavaScript代码规范你要知道哪些
2018/04/04 Javascript
微信小程序实现获取准确的腾讯定位地址功能示例
2019/03/27 Javascript
uni-app如何实现增量更新功能
2020/01/03 Javascript
js实现文章目录索引导航(table of content)
2020/05/10 Javascript
小程序中的箭头函数的具体使用
2020/06/19 Javascript
vue 获取到数据但却渲染不到页面上的解决方法
2020/11/19 Vue.js
pthon贪吃蛇游戏详细代码
2019/01/27 Python
利用Python进行图像的加法,图像混合(附代码)
2019/07/14 Python
python队列原理及实现方法示例
2019/11/27 Python
Python实现中值滤波去噪方式
2019/12/18 Python
python3.8下载及安装步骤详解
2020/01/15 Python
Pandas之read_csv()读取文件跳过报错行的解决
2020/04/21 Python
keras实现调用自己训练的模型,并去掉全连接层
2020/06/09 Python
PyTorch的torch.cat用法
2020/06/28 Python
CSS3 translate导致字体模糊的实例代码
2019/08/30 HTML / CSS
新闻学专业大学生职业生涯规划范文
2014/03/02 职场文书
电子专业自荐信
2014/07/01 职场文书
民主生活会发言材料
2014/10/20 职场文书
2014年党的群众路线活动个人整改措施
2014/10/28 职场文书
2014年工程部工作总结
2014/11/25 职场文书
应急管理工作总结2015
2015/05/04 职场文书