仅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 ajax 登录验证实现代码
Sep 23 Javascript
jquery限定文本框只能输入数字即整数和小数
Nov 29 Javascript
JavaScript实现输入框(密码框)出现提示语
Jan 12 Javascript
JS中对象与字符串的互相转换详解
May 20 Javascript
jquery计算出left和top,让一个div水平垂直居中的简单实例
Jul 13 Javascript
JavaScript Uploadify文件上传实例
Feb 28 Javascript
基于Vue实现timepicker
Apr 25 Javascript
几种响应式文字详解
May 19 Javascript
vue项目中使用axios上传图片等文件操作
Nov 02 Javascript
手写Node静态资源服务器的实现方法
Mar 20 Javascript
详解webpack引入第三方库的方式以及注意事项
Jan 15 Javascript
Vue $attrs & inheritAttr实现button禁用效果案例
Dec 07 Vue.js
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异步多线程swoole用法实例
2014/11/14 PHP
PHP批量去除BOM头代码分享
2015/06/26 PHP
Zend Framework教程之Zend_Db_Table用法详解
2016/03/21 PHP
使用PHP+MySql实现微信投票功能实例代码
2017/09/29 PHP
基于laravel缓冲cache的用法详解
2019/10/23 PHP
用JavaScript仿PS里的羽化效果代码
2011/12/20 Javascript
eclipse导入jquery包后报错的解决方法
2014/02/17 Javascript
jQuery插件制作的实例教程
2016/05/16 Javascript
深入理解jQuery之防止冒泡事件
2016/05/24 Javascript
Bootstrap Paginator分页插件使用方法详解
2016/05/30 Javascript
js实现文字选中分享功能
2017/01/25 Javascript
js脚本编写简单刷票投票系统
2017/06/27 Javascript
详解angularjs4部署文件过大解决过程
2018/12/05 Javascript
你可能不知道的CORS跨域资源共享
2019/03/13 Javascript
利用Angular7开发一个Radio组件的全过程
2019/07/11 Javascript
微信小程序获取用户绑定手机号方法示例
2019/07/21 Javascript
使用vuex较为优雅的实现一个购物车功能的示例代码
2019/12/09 Javascript
返回上一个url并刷新界面的js代码
2020/09/12 Javascript
python3.3实现乘法表示例
2014/02/07 Python
Python基于回溯法子集树模板解决最佳作业调度问题示例
2017/09/08 Python
Python实现句子翻译功能
2017/11/14 Python
Python爬虫爬取新浪微博内容示例【基于代理IP】
2018/08/03 Python
Selenium(Python web测试工具)基本用法详解
2018/08/10 Python
virtualenv 指定 python 解释器的版本方法
2018/10/25 Python
python-opencv 将连续图片写成视频格式的方法
2019/01/08 Python
使用 pytorch 创建神经网络拟合sin函数的实现
2020/02/24 Python
Python3 用什么IDE开发工具比较好
2020/11/28 Python
德国汉莎航空中国官网: Lufthansa中国
2017/03/30 全球购物
香蕉共和国工厂店:Banana Republic Factory
2018/06/09 全球购物
建筑专业自荐信
2013/10/18 职场文书
计算机专业职业生涯规划范文
2014/01/19 职场文书
情侣吵架检讨书
2014/02/05 职场文书
社区助残日活动总结
2014/08/29 职场文书
2015年生产部工作总结范文
2015/05/25 职场文书
《老人与海鸥》教学反思
2016/02/16 职场文书
实例讲解Python中sys.argv[]的用法
2021/06/03 Python