作家
登录

仅IE不支持setTimeout/setInterval函数的第三个以上参数

作者: 来源:www.28hudong.com 2013-03-30 00:51:47 阅读 我要评论

复制代码 代码如下: 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 ) } } ); }

  推荐阅读

  读jQuery之三(构建选择器)

为了叙述每一篇的重点,其示例代码都是最精简的,比如选择器只能传HTMLElement和id。这篇我们增强下选择器,依据2/8原则,这里仅实现最常用的几种。1, 通过id获取,该元素是唯一的$('#id')2, 通过className获取$('.>>>详细阅读


本文标题:仅IE不支持setTimeout/setInterval函数的第三个以上参数

地址:http://www.17bianji.com/kaifa2/JS/24530.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)