• 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

    停止重复计时器

  • 相关阅读:
    puppeteer,新款headless chrome!
    圣诞快乐,而且写博客有两年了~
    es2015及es2017对我们的编程方式造成了什么影响?
    Redis的安装和部署
    ActiveMQ5.0实战三:使用Spring发送,消费topic和queue消息
    hsweb 企业后台管理基础框架
    通过Spring Session实现新一代的Session管理
    mod_pagespeed
    unusedjs
    apache模块 合并多个js/css 提高网页加载速度
  • 原文地址:https://www.cnblogs.com/orchid/p/1708864.html
Copyright © 2020-2023  润新知