1,setTimeout()
从技术上讲,当setTimeout函数被调用时,浏览器将把该语句添加到待执行的语句列表中,同时程序中的其他语句并不会停止,而是继续运行。只要完成了当前正执行的语句,浏览器就会检测待执行的语句列表,并且执行已经到期的语句。如果指定的延迟时间到了,但是浏览器仍在执行其他任务,那么setTimeout函数指定的任务将会延迟,知道所有其他任务都已经完成。
在看这样一段语句:
function fun(){
var message='hello';
setTimeout('alert(message)',1000);
}
1000毫秒后弹出什么?是hello吗?
不是。
因为setTimeout()参数所指定的语句具有全局作用域。setTimeout函数无法访问调用setTimeout函数中指定的任何局部变量。
解决这个问题有3个办法:
方法一:删除变量声明的关键字var,使得message成为全局变量。
方法二:setTimeout("alert(' " "+message+" " ')",1000)。
方法三:闭包。闭包用来定义允许函数内部的函数访问外层函数的局部变量,而不考虑外层函数的运行时间。换言之,函数能方位定义该函数的上下文,即使上下文是一个不再执行的函数。因此,即便外层函数已经在数分钟前执行完毕了,但在它执行时所定义的函数仍然可以访问该函数的局部变量。
例如上面的例子:
function func(){
var message='hello';
var myFun=function(){
alert(message);
}
setTimeout(myFun,1000);
}
2,clearTimeout()
停止计时器
3,setTimeInterval
执行该函数时,其等待方式与setTimeout方式相同。setTimeInterval函数有个问题:无论指定的任务的实际执行时间是多长,setTimeInterval函数总会是以固定的时间间隔来调度这些任务,由于执行时间长的任务会产生过量的延时,从而造成执行时间短的任务随后被立即执行,所以就会导致这两个任务之间没有任何时间间隔。在一个动画中这回产生严重的后果。所以,制作动画时还是使用setTimeout比较好些。
4,clearInterval
停止重复计时器