javascript中的时间控制函数

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

停止重复计时器

posted @ 2010-04-10 11:35  orchid  阅读(1671)  评论(0编辑  收藏  举报