仅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的一个图片hover的插件
Apr 24 Javascript
js点击更换背景颜色或图片的实例代码
Jun 25 Javascript
使用jquery插件qrcode生成二维码
Oct 22 Javascript
javascript特殊日历控件分享
Mar 07 Javascript
前端框架Vue.js中Directive知识详解
Sep 12 Javascript
Vuejs2 + Webpack框架里,模拟下载的实例讲解
Sep 05 Javascript
Vue2.5学习笔记之如何在项目中使用和配置Vue
Sep 26 Javascript
mpvue小程序循环动画开启暂停的实现方法
May 15 Javascript
JS实现的tab切换并显示相应内容模块功能示例
Aug 03 Javascript
弱类型语言javascript开发中的一些坑实例小结【变量、函数、数组、对象、作用域等】
Aug 07 Javascript
vue-cli3.X快速创建项目的方法步骤
Nov 14 Javascript
Vue SSR 即时编译技术的实现
May 06 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模板,主要想体现一下思路
2006/12/25 PHP
PHP 读取文本文件内容并分页显示
2016/01/02 PHP
php 数组随机取值的简单实例
2016/05/23 PHP
js 禁用只读文本框获得焦点时的退格键
2010/04/25 Javascript
Javascript Boolean、Nnumber、String 强制类型转换的区别详细介绍
2012/12/13 Javascript
js使用栈来实现10进制转8进制与取除数及余数
2014/06/11 Javascript
js点击button按钮跳转到另一个新页面
2014/10/10 Javascript
Javascript学习笔记之函数篇(五) : 构造函数
2014/11/23 Javascript
理解Javascript的call、apply
2015/12/16 Javascript
jQuery插件EasyUI设置datagrid的checkbox为禁用状态的方法
2016/08/05 Javascript
Next.js项目实战踩坑指南(笔记)
2018/11/29 Javascript
vue 的 solt 子组件过滤过程解析
2019/09/07 Javascript
深入探索VueJS Scoped CSS 实现原理
2019/09/23 Javascript
浅谈vue 组件中的setInterval方法和window的不同
2020/07/30 Javascript
vue自动添加浏览器兼容前后缀操作
2020/08/13 Javascript
使用基于Python的Tornado框架的HTTP客户端的教程
2015/04/24 Python
Python随手笔记之标准类型内建函数
2015/12/02 Python
简介Python设计模式中的代理模式与模板方法模式编程
2016/02/02 Python
利用Python对文件夹下图片数据进行批量改名的代码实例
2019/02/21 Python
详解Python中的测试工具
2019/06/09 Python
2020最新pycharm汉化安装(python工程狮亲测有效)
2020/04/26 Python
详解Python3.8+PyQt5+pyqt5-tools+Pycharm配置详细教程
2020/11/02 Python
HTML5头部标签的一些常用信息小结
2016/10/23 HTML / CSS
利用promise及参数解构封装ajax请求的方法
2021/03/24 Javascript
便利店的创业计划书
2014/01/15 职场文书
cf收人广告词
2014/03/14 职场文书
揭牌仪式策划方案
2014/05/28 职场文书
班级学雷锋活动总结
2014/06/26 职场文书
幼儿园园长新年寄语2015
2014/12/08 职场文书
2015年度企业工作总结
2015/05/21 职场文书
法院答辩状格式
2015/05/22 职场文书
办公用品管理制度
2015/08/04 职场文书
如何判断pytorch是否支持GPU加速
2021/06/01 Python
python运算符之与用户交互
2022/04/13 Python
5个pandas调用函数的方法让数据处理更加灵活自如
2022/04/24 Python
JavaScript中reduce()的用法
2022/05/11 Javascript