您的位置:首页 > Web前端 > JavaScript

javascript的setTimeout用法,以及一些bug的解决

2014-06-13 17:42 561 查看
setInterval

clearInterval

setTimeout

clearTimeout

(1)setInterval每隔一段时间执行指定的代码,第一个参数为代码的字符串,第二个参数为间隔时间(单位毫秒) ,返回值为定时器的标识

setInterval("alert('hello')", 5000);

(2)clearInterval取消setInterval的定时执行,相当于Timer中的Enabled=False。因为setInterval可以设定多个定时器,所以clearInterval要指定清除那个定时器的标识,即setInterval的返回值。

var intervalId = setInterval("alert('hello')", 5000);

clearInterval(intervalId);

(3)setTimeout也是定时执行,但是不像setInterval那样是重复的定时执行,只执行一次,clearTimeout也是清除定时。很好区分:Interval:间隔;timeout:超时。

var timeoutId = setTimeout("alert('hello')", 2000);

2)clearTimeout取消setTimeout的定时执行

var intervalId = setTimeout("alert('hello')", 5000);

clearTimeout(intervalId);

(4)他们共同的一个bug:用于隔n秒就递归调用函数自己,函数自我递归

正确:写function的时候不用加双引号""

function a(){

setTimeout(funtion(){a();},100);//或者setTimeout(a,100);

}

a();

这种方法可以隔1秒调用一次自己,但是当我使用时 显示a函数未定义。。。

错误:

setTimeout(“a()”,100);

a();

至今不知道为什么:以后在setTimeout这种延时函数里调用函数最好是写在function(){}里

网上结论:

无论何时不建议在setTimeout里传字符串进去,虽然可以用,但是有很大缺点,和eval差不多。第一种写法是最推荐的,写一个匿名函数,再在里面写代码。

六个月后:我终于知道这个问题的原因了

知道这个bug的原因的

因为在递归自己的时候用了setTimeout 这个是外部函数

此时的命名空间的域已经跳走了

就是说this已经不是本函数了

你要做的是

that = this;

setTimeout(“that.a()”,100);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: