仅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 相关文章推荐
IE6 hack for js 集锦
Sep 23 Javascript
js实现右下角提示框的方法
Feb 03 Javascript
js格式化输入框内金额、银行卡号
Feb 01 Javascript
Javascript中prototype的使用详解
Jun 18 Javascript
原生js实现下拉框功能(支持键盘事件)
Jan 13 Javascript
原生js实现新闻列表展开/收起全文功能
Jan 20 Javascript
node.js 中间件express-session使用详解
May 20 Javascript
帝国cms首页列表页实现点赞功能
Oct 30 Javascript
vue 组件的封装之基于axios的ajax请求方法
Aug 11 Javascript
JavaScript Array对象使用方法解析
Sep 24 Javascript
Vue过渡效果之CSS过渡详解(结合transition,animation,animate.css)
Feb 05 Javascript
原生JS实现京东查看商品点击放大
Dec 21 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
IP攻击升级,程序改进以对付新的攻击
2010/11/23 PHP
怎样搭建PHP开发环境
2015/07/28 PHP
PHP实现登陆并抓取微信列表中最新一组微信消息的方法
2017/07/10 PHP
PHP判断json格式是否正确的实现代码
2017/09/20 PHP
详解php伪造Referer请求反盗链资源
2019/01/24 PHP
js 控制图片大小核心讲解
2013/10/09 Javascript
js判读浏览器是否支持html5的canvas的代码
2013/11/18 Javascript
javascript实现数独解法
2015/03/14 Javascript
JQuery中层次选择器用法实例详解
2015/05/18 Javascript
JavaScript实现多种排序算法
2016/02/24 Javascript
onclick和onblur冲突问题的快速解决方法
2016/04/28 Javascript
详解Node.js 命令行程序开发教程
2017/06/07 Javascript
jQuery实现对网页节点的增删改查功能示例
2017/09/18 jQuery
Angular2仿照微信UI实现9张图片上传和预览的示例代码
2017/10/19 Javascript
Nuxt.js踩坑总结分享
2018/01/18 Javascript
vuex中的 mapState,mapGetters,mapActions,mapMutations 的使用
2018/04/13 Javascript
autojs 蚂蚁森林能量自动拾取即给指定好友浇水的实现方法
2020/05/03 Javascript
[01:25]2014DOTA2国际邀请赛 zhou分析LGD比赛情况
2014/07/14 DOTA
Python对小数进行除法运算的正确方法示例
2014/08/25 Python
Python的SQLAlchemy框架使用入门
2015/04/29 Python
举例详解Python中threading模块的几个常用方法
2015/06/18 Python
各种Python库安装包下载地址与安装过程详细介绍(Windows版)
2016/11/02 Python
快速了解Python中的装饰器
2018/01/11 Python
几种实用的pythonic语法实例代码
2018/02/24 Python
Python爬虫包BeautifulSoup实例(三)
2018/06/17 Python
python中实现控制小数点位数的方法
2019/01/24 Python
python买卖股票的最佳时机(基于贪心/蛮力算法)
2019/07/05 Python
python interpolate插值实例
2020/07/06 Python
通过Django Admin+HttpRunner1.5.6实现简易接口测试平台
2020/11/11 Python
Python和Bash结合在一起的方法
2020/11/13 Python
美国美发品牌:Bumble and Bumble
2016/10/08 全球购物
2014广电局实施党的群众路线教育实践活动方案思想汇报
2014/09/22 职场文书
2014年辅导员工作总结
2014/11/18 职场文书
贫困证明书范文
2015/06/16 职场文书
2015年市场营销工作总结
2015/07/23 职场文书
z-index不起作用
2021/03/31 HTML / CSS