仅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判断元素是否是隐藏的代码
Apr 24 Javascript
jQuery组件easyui对话框实现代码
Aug 25 Javascript
JS中append字符串包含onclick无效传递参数失败的解决方案
Dec 26 Javascript
vue2 如何实现div contenteditable=“true”(类似于v-model)的效果
Feb 08 Javascript
react实现pure render时bind(this)隐患需注意!
Mar 09 Javascript
详解从angular-cli:1.0.0-beta.28.3升级到@angular/cli:1.0.0
May 22 Javascript
关于JavaScript 数组你应该知道的事情(推荐)
Apr 10 Javascript
vue项目使用.env文件配置全局环境变量的方法
Oct 24 Javascript
angular8和ngrx8结合使用的步骤介绍
Dec 01 Javascript
vue实现商城秒杀倒计时功能
Dec 12 Javascript
react基本安装与测试示例
Apr 27 Javascript
js实现详情页放大镜效果
Oct 28 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 Zip压缩 在线对文件进行压缩的函数
2010/05/26 PHP
php用数组返回无限分类的列表数据的代码
2010/08/08 PHP
php数组函数序列之array_combine() - 数组合并函数使用说明
2011/10/29 PHP
php shell超强免杀、减少体积工具实现代码
2012/10/16 PHP
php中的四舍五入函数代码(floor函数、ceil函数、round与intval)
2014/07/14 PHP
php 删除cookie方法详解
2014/12/01 PHP
jquery 跨域访问问题解决方法(笔记)
2011/06/08 Javascript
javascript 构造函数强制调用经验总结
2012/12/02 Javascript
浅谈Nodejs观察者模式
2015/10/13 NodeJs
JavaScript实现九九乘法表的简单实例
2016/06/07 Javascript
微信小程序使用navigateTo数据传递的实例
2017/09/26 Javascript
Vue 样式绑定的实现方法
2019/01/15 Javascript
详解vue-cli3 中跨域解决方案
2019/04/10 Javascript
使用Vue调取接口,并渲染数据的示例代码
2019/10/28 Javascript
解决vue下载后台传过来的乱码流的问题
2020/12/05 Vue.js
vue浏览器返回监听的具体步骤
2021/02/03 Vue.js
在python里从协程返回一个值的示例
2019/02/19 Python
Django ORM 常用字段与不常用字段汇总
2019/08/09 Python
基于python3抓取pinpoint应用信息入库
2020/01/08 Python
django rest framework 过滤时间操作
2020/07/12 Python
理肤泉加拿大官网:La Roche-Posay加拿大
2018/07/06 全球购物
什么是Assembly(程序集)
2014/09/14 面试题
生产车间实习自我鉴定
2013/09/23 职场文书
实习自我鉴定
2013/12/15 职场文书
宝宝周岁宴答谢词
2014/01/26 职场文书
天猫某品牌专卖店运营计划书
2014/03/21 职场文书
法制宣传月活动总结
2014/04/29 职场文书
人事任命书怎么写
2014/06/05 职场文书
2015年八一建军节慰问信
2015/03/23 职场文书
2015年财务部年度工作总结
2015/05/19 职场文书
小学主题班会教案
2015/08/17 职场文书
中考百日冲刺决心书
2015/09/22 职场文书
小学语文教师研修感悟
2015/11/18 职场文书
MySQL 分组查询的优化方法
2021/05/12 MySQL
Pygame Event事件模块的详细示例
2021/11/17 Python
SQL中去除重复数据的几种方法汇总(窗口函数对数据去重)
2023/05/08 MySQL