Js中setInterval、setTimeout不能传递参数问题

昨晚写JS中遇到令人抓狂的bug,最后发现是因为window方法的setinterval不能带参数问题引起的(只能执行一次,不能周期性执行)。但是很多情况下函数都是要带参数的,把一些信息传递进去进行处理。而setinterval不能带参数的话,会带来很多麻烦。于是从网上搜罗了很久,加上自己的调试,总结出几种解决的办法:

———————————————————————————————————————————

一、采用字符串形式:——(缺陷)参数不能被周期性改变

setInterval("foo(id)",1000);

 

二、匿名函数包装

window.setInterval(function()

    {

foo (id);

    }, 1000);

   这样就可以周期性执行fooid)这个函数,而且把变量id传递进去;

 

三、定义返回无参函数的函数

function foo(id)

{

   alert(id);

}

function _foo(id)

{

return function()

{

foo(id);

}

}

window.setInterval(_foo(id),1000);

这里定义了一个函数_foo,用于接收一个参数,并返回一个不带参数的函数,在这个函数内部使用了外部函数的参数,从而对其调用,不需要使用参数。在 window. setInterval函数中,使用_foo(id)来返回一个不带参数的函数句柄,从而实现了参数传递的功能。

 

四、修改setInterval

function foo(id)

{

alert(id);

}

var _sto = setInterval;   

window.setInterval = function(callback,timeout,param)

{   

var args = Array.prototype.slice.call(arguments,2);   

var _cb = function()

{   

callback.apply(null,args);   

}    

_sto(_cb,timeout);   

}

window.setInterval(hello,3000,userName);

—————————————————————————————————————-

以上的所有方法也适合setTimeout

关键词:, ,

转载注明:转自风致雅阁

  1. No comments yet.

  1. No trackbacks yet.





2012 二月
« 十一    
 12345
6789101112
13141516171819
20212223242526
272829