仅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 maxlength文本字数限制插件
Apr 16 Javascript
基于jquery的横向滚动条(滑动条)
Feb 24 Javascript
js/ajax跨越访问-jsonp的原理和实例(javascript和jquery实现代码)
Dec 27 Javascript
table对象中的insertRow与deleteRow使用示例
Jan 26 Javascript
javascript中callee与caller的区别分析
Apr 20 Javascript
JavaScript判断变量是否为数组的方法(Array)
Feb 24 Javascript
javascript中sort排序实例详解
Jul 24 Javascript
Bootstrap Tree View简单而优雅的树结构组件实例解析
Jun 15 Javascript
JavaScript之underscore_动力节点Java学院整理
Jul 03 Javascript
浅析Angular 实现一个repeat指令的方法
Jul 21 Javascript
JS轮播图的实现方法
Aug 24 Javascript
三剑客:offset、client和scroll还傻傻分不清?
Dec 04 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技术开发技巧分享
2010/03/23 PHP
php后退一页表单内容保存实现方法
2012/06/17 PHP
如何在PHP中使用正则表达式进行查找替换
2013/06/13 PHP
PHP删除HTMl标签的实现代码
2013/06/30 PHP
PHP二维数组排序的3种方法和自定义函数分享
2014/04/09 PHP
Yii2中cookie用法示例分析
2016/07/18 PHP
PHP中的密码加密的解决方案总结
2016/10/26 PHP
jquery实现的元素的left增加N像素 鼠标移开会慢慢的移动到原来的位置
2010/03/21 Javascript
过虑特殊字符输入的js代码
2010/08/05 Javascript
JS运行耗时操作的延时显示方法
2010/11/19 Javascript
主页面中的两个iframe实现鼠标拖动改变其大小
2013/04/16 Javascript
JS获取屏幕,浏览器窗口大小,网页高度宽度(实现代码)
2013/12/17 Javascript
JavaScript 实现完美兼容多浏览器的复制功能代码
2015/04/28 Javascript
使用impress.js制作幻灯片
2015/09/09 Javascript
jquery实现手风琴效果
2015/11/20 Javascript
判断输入的字符串是否是日期格式的简单方法
2016/07/11 Javascript
jQuery实现表格行和列的动态添加与删除方法【测试可用】
2016/08/01 Javascript
JavaScript中 ES6 generator数据类型详解
2016/08/11 Javascript
js代码实现下拉菜单【推荐】
2016/12/15 Javascript
jQuery分页插件jquery.pagination.js使用方法解析
2017/02/09 Javascript
使用原生js封装的ajax实例(兼容jsonp)
2017/10/12 Javascript
Vue中父子组件通讯之todolist组件功能开发
2018/05/21 Javascript
React 组件中的 bind(this)示例代码
2018/09/16 Javascript
Vue CLI4 Vue.config.js标准配置(最全注释)
2020/06/05 Javascript
解决removeEventListener 无法清除监听的问题
2020/10/30 Javascript
[01:40]2014DOTA2国际邀请赛 三冰SOLO赛后采访恶搞
2014/07/09 DOTA
Python实现 版本号对比功能的实例代码
2019/04/18 Python
Django模板标签中url使用详解(url跳转到指定页面)
2020/03/19 Python
HTML5页面音视频在微信和app下自动播放的实现方法
2016/10/20 HTML / CSS
Kangol帽子官网:坎戈尔袋鼠
2018/09/26 全球购物
改变生活的男士内衣:SAXX Underwear
2019/08/28 全球购物
中考标语大全
2014/06/05 职场文书
学校关爱留守儿童活动方案
2014/08/27 职场文书
2014年酒店工作总结与计划
2014/11/17 职场文书
小程序后台PHP版本部署运行 LNMP+WNMP
2021/04/01 Servers
JavaScript实现复选框全选功能
2021/04/11 Javascript