zoukankan      html  css  js  c++  java
  • JS 定时器&异步任务与函数节流

    定时器

    JavaScript 提供定时执行代码的功能,叫做定时器(timer),主要由setTimeout()setInterval()这两个函数来完成。它们向任务队列添加定时任务。

    1)setTimeout

     setTimeout函数用来指定某个函数或某段代码,在多少毫秒之后执行。它返回一个整数,表示定时器的编号,以后可以用来取消这个定时器。

    var timer = setTimeout(func|code, delay);  //第一个参数可以是函数也可以是代码块,第二个是延迟的时间,单位是毫秒
    console.log(1);
    setTimeout('console.log(2)',1000);
    console.log(3);
    // 1
    // 3
    // 2

    如果第一个参数填入的是代码,需要加上引号必须是字符串的形式,里面有eval的方法将字符串解析成代码执行,一般最好不要用这种方式。

    2)setInterval

    setInterval函数的用法与setTimeout完全一致,区别仅仅在于setInterval指定某个任务每隔一段时间就执行一次,也就是无限次的定时执行。

    var i = 0;
    var timer = setInterval(function(){
        console.log(i++)
    },1000)
    0
    1
    2
    3
    4
    //每隔一秒执行一次代码。

    这两个定时器的方法执行后会有个返回值,是它们的编号,我们可以对这些编号进行操作。

    setInterval(function(){
        console.log('zxw');
    },1000)
    30  //可以对编号进行操作,如用clearInterval可以清除代码继续执行
    
    var timer =clearInterval(function(){
        console.log('zxw');
    },1000)
    
    clearInterval(timer)

    3)单线程模型

    指的是任务在一个线程上执行,JavaScript同时只能执行一个任务,其他任务都必须在后面排队等待。
    注意,JavaScript 只在一个线程上运行,不代表 JavaScript 引擎只有一个线程。事实上,JavaScript 引擎有多个线程,单个脚本只能在一个线程上运行(称为主线程),其他线程都是在后台配合。

    4)运行机制

    setTimeoutsetInterval的运行机制,是将指定的代码移出本轮事件循环,等到下一轮事件循环,再检查是否到了指定时间。如果到了,就执行对应的代码;如果不到,就继续等待。

    这意味着,setTimeoutsetInterval指定的回调函数,必须等到本轮事件循环的所有同步任务都执行完,才会开始执行。由于前面的任务到底需要多少时间执行完,是不确定的,所以没有办法保证,setTimeoutsetInterval指定的任务,一定会按照预定时间执行。

    5)异步

    程序里面所有的任务,可以分成两类:同步任务(synchronous)和异步任务(asynchronous)。

    同步任务是那些没有被引擎挂起、在主线程上排队执行的任务。只有前一个任务执行完毕,才能执行后一个任务。

    异步任务是那些被引擎放在一边,不进入主线程、而进入任务队列的任务。只有引擎认为某个异步任务可以执行了(比如 Ajax 操作从服务器得到了结果),该任务(采用回调函数的形式)才会进入主线程执行。排在异步任务后面的代码,不用等待异步任务结束会马上运行,也就是说,异步任务不具有“堵塞”效应。

    6)函数节流

    当一个方法频繁多次用到,以判断最后一个的操作为准。
    var timer
    function hiFrequency(){
        if(timer){
            clearTimeout(timer)
        }
          timer = setTimeout(function(){
               console.log('do something')
          }, 300)
    }
  • 相关阅读:
    学习python第四天——列表方法
    昨天休息了一天,今天补上。列表学习
    第二天学习——字符串的方法
    mongodb
    linux学习篇(一)
    mysql优化
    linux服务
    vue配置服务器
    photoshop学习
    关于视图
  • 原文地址:https://www.cnblogs.com/ianyanyzx/p/9682668.html
Copyright © 2011-2022 走看看