仅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 相关文章推荐
用jquery实现的一个超级简单的下拉菜单
May 18 Javascript
详解JavaScript中的blink()方法的使用
Jun 08 Javascript
JS动态遍历json中所有键值对的方法(不知道属性名的情况)
Dec 28 Javascript
那些精彩的JavaScript代码片段
Jan 12 Javascript
jquery+ajax实现省市区三级联动 (封装和不封装两种方式)
May 15 jQuery
angularjs2中父子组件的数据传递的实例代码
Jul 05 Javascript
JS实现的简单下拉框联动功能示例
May 11 Javascript
Vue登录注册并保持登录状态的方法
Aug 17 Javascript
详解vue更改头像功能实现
Apr 28 Javascript
微信小程序实现类似微信点击语音播放效果
Mar 30 Javascript
JS异步处理的进化史深入讲解
Aug 25 Javascript
JS数据类型判断的几种常用方法
Jul 07 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
Linux系统递归生成目录中文件的md5的方法
2015/06/29 PHP
背景音乐每次刷新都可以自动更换
2007/02/01 Javascript
js 代码集(学习js的朋友可以看下)
2009/07/22 Javascript
javascript 写的一个简单的timer
2009/07/30 Javascript
jquery判断浏览器后退时候弹出消息的方法
2014/08/11 Javascript
实现非常简单的js双向数据绑定
2015/11/06 Javascript
jQuery实现table中的tr上下移动并保持序号不变的实例代码
2016/07/11 Javascript
JavaScript脚本语言是什么_动力节点Java学院整理
2017/06/26 Javascript
使用webpack打包koa2 框架app
2018/02/02 Javascript
angularjs数组判断是否含有某个元素的实例
2018/02/27 Javascript
使用webpack-dev-server处理跨域请求的方法
2018/04/18 Javascript
vue路由拦截及页面跳转的设置方法
2018/05/24 Javascript
layui实现点击按钮给table添加一行
2018/08/10 Javascript
对vux点击事件的优化详解
2018/08/28 Javascript
解决layui弹出层layer的area过大被遮挡的问题
2019/09/21 Javascript
layer.open 获取不到表单信息的解决方法
2019/09/26 Javascript
vue 判断两个时间插件结束时间必选大于开始时间的代码
2020/11/04 Javascript
聊聊vue 中的v-on参数问题
2021/01/29 Vue.js
[00:43]TI7不朽珍藏III——幽鬼不朽展示
2017/07/15 DOTA
python设置检查点简单实现代码
2014/07/01 Python
Python实现爬虫爬取NBA数据功能示例
2018/05/28 Python
Python批量生成特定尺寸图片及图画任意文字的实例
2019/01/30 Python
Pycharm如何打断点的方法步骤
2019/06/13 Python
python生成器/yield协程/gevent写简单的图片下载器功能示例
2019/10/28 Python
Python测试线程应用程序过程解析
2019/12/31 Python
Python面向对象中类(class)的简单理解与用法分析
2020/02/21 Python
python+adb命令实现自动刷视频脚本案例
2020/04/23 Python
Win10下用Anaconda安装TensorFlow(图文教程)
2020/06/18 Python
python -v 报错问题的解决方法
2020/09/15 Python
详解Python GUI编程之PyQt5入门到实战
2020/12/10 Python
纯CSS3实现地球自转实现代码(图文教程附送源码)
2012/12/26 HTML / CSS
涂鸦板简单实现 Html5编写属于自己的画画板
2016/07/05 HTML / CSS
如何设定的weblogic的热启动模式(开发模式)与产品发布模式
2012/09/08 面试题
学年自我鉴定范文
2013/10/01 职场文书
开展党的群众路线教育实践活动工作总结
2014/11/05 职场文书
浅析CSS在DevTools 中架构演变
2021/10/05 HTML / CSS