仅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 相关文章推荐
js里的prototype使用示例
Nov 19 Javascript
基于jquery的关于动态创建DOM元素的问题
Dec 24 Javascript
把字符串按照特定的字母顺序进行排序的js代码
Jan 28 Javascript
node.js中的buffer.toString方法使用说明
Dec 14 Javascript
jQuery实现360°全景拖动展示
Mar 18 Javascript
javascript实现给定半径求出圆的面积
Jun 26 Javascript
微信小程序 获取当前地理位置和经纬度实例代码
Dec 05 Javascript
JavaScript Uploadify文件上传实例
Feb 28 Javascript
小程序封装路由文件和路由方法(5种全解析)
May 26 Javascript
简单学习5种处理Vue.js异常的方法
Jun 17 Javascript
解决vue单页面修改样式无法覆盖问题
Aug 05 Javascript
three.js着色器材质的内置变量示例详解
Aug 16 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+MSSQL分页的例子
2006/10/09 PHP
php使用百度天气接口示例
2014/04/22 PHP
自编函数解决pathinfo()函数处理中文问题
2014/11/03 PHP
代码精简的可以实现元素圆角的js函数
2007/07/21 Javascript
详解new function(){}和function(){}() 区别分析
2008/03/22 Javascript
JSON.stringify 语法实例讲解
2012/03/14 Javascript
javascript里模拟sleep(两种实现方式)
2013/01/25 Javascript
js和jquery对dom节点的操作(创建/追加)
2013/04/21 Javascript
JS Replace()的高级使用方法介绍
2013/06/29 Javascript
JavaScript中的alert()函数使用技巧详解
2014/12/29 Javascript
JS实现超过长度限制后自动跳转下一款文本框的方法
2015/02/23 Javascript
json实现添加、遍历与删除属性的方法
2016/06/17 Javascript
Vue2.0表单校验组件vee-validate的使用详解
2017/05/02 Javascript
vue2.0 与 bootstrap datetimepicker的结合使用实例
2017/05/22 Javascript
JavaScript生成图形验证码
2020/08/24 Javascript
vue-cli下的vuex的简单Demo图解(实现加1减1操作)
2018/02/26 Javascript
JavaScript ECMA-262-3 深入解析(二):变量对象实例详解
2020/04/25 Javascript
python获取标准北京时间的方法
2015/03/24 Python
Python导出DBF文件到Excel的方法
2015/07/25 Python
Python实现的文本简单可逆加密算法示例
2017/05/18 Python
TensorFlow Session会话控制&Variable变量详解
2018/07/30 Python
pycharm修改文件的默认打开方式的步骤
2019/07/29 Python
css3弹性盒模型实例介绍
2013/05/27 HTML / CSS
Linux如何命名文件--使用文件名时应注意
2012/01/22 面试题
夜大毕业自我鉴定
2013/10/11 职场文书
工作人员思想汇报
2014/01/09 职场文书
银行开业庆典方案
2014/02/06 职场文书
《十六年前的回忆》教学反思
2014/02/14 职场文书
工艺工程师岗位职责
2014/03/04 职场文书
公共场所标语
2014/06/30 职场文书
关于有小孩的离婚协议书
2014/10/26 职场文书
研究生给导师的自荐信
2015/03/06 职场文书
2015年八一建军节演讲稿
2015/03/19 职场文书
用python修改excel表某一列内容的操作方法
2021/06/11 Python
SQL实现LeetCode(178.分数排行)
2021/08/04 MySQL
Netty客户端接入流程NioSocketChannel创建解析
2022/03/25 Java/Android