手机
当前位置:查字典教程网 >编程开发 >Javascript教程 >仅IE不支持setTimeout/setInterval函数的第三个以上参数
仅IE不支持setTimeout/setInterval函数的第三个以上参数
摘要:复制代码代码如下:setTimeout(function(obj){alert(obj.a);},2000,{a:1});即传了第三个参数,...

复制代码 代码如下:

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

)

}

}

);

}

【仅IE不支持setTimeout/setInterval函数的第三个以上参数】相关文章:

JS对字符串编码的几种方式使用

正宗的日历(含农历)

怎么用javascript进行拖拽第1/2页

JQuery中clone方法复制节点

JavaScript中eval函数的问题

创建你的第一个AngularJS应用的方法

angular2使用简单介绍

js的event详解。

JQuery中层次选择器用法实例详解

Java数据类型转换(自动转换和强制转换)

精品推荐
分类导航