zoukankan      html  css  js  c++  java
  • 用 setTimeout 实现 setInterval

    window.idarr = [0];
    function _setInterval(fun, time) {
        var id = setTimeout(function() {
            _setInterval(fun, time);
            fun();
            clearTimeout(id);
        }, time);
        window.idarr.pop();
        window.idarr.push(id);
        return window.idarr;
    }
    function _clearInterval(id) {
        clearTimeout(id[0]);
    }
    

    因为 setInterval 是setTimeout 实现,所以 clearInterval 也要用 clearTimeout 实现。但是 setInetrval 应该返回的是一个数字,这里就有点为难了,因为它必须返回的是正在执行的 setTimeout 函数的计时器编码,没办法。我只能用数组去存储这个 id,因为 return window.idarr 返回的是内存地址,直接操作 idarr 数组,自然就可以接收当前的计时器编码。不知道有啥其他的好法子。

    还有一个问题想不明白,为啥编码没有 “2” 呢?

    window.idarr = [];
    function _setInterval(fun, time) {
        var id = setTimeout(function() {
            _setInterval(fun, time);
            fun();
            clearTimeout(id);
        }, time);
        window.idarr.push(id);
        return window.idarr;
    }
    
    function _clearInterval(id) {
        clearTimeout(id.slice(-1)[0]);
    }
    
    var count = 0;
    var timerId = _setInterval(function() {
        count++;
        console.log(timerId);
        if(count==10){
            _clearInterval(timerId);
        }
    }, 1000);
    

    执行结果:

    为啥没有 ”2“ 呢?

  • 相关阅读:
    类加载机制与jdk智能调优命令
    初认Redis
    Spring-Cloud组件eureka
    SpringBoot入门知识
    SpringCloud
    java内存模型
    Redis
    Vue
    Nginx
    Linux系统
  • 原文地址:https://www.cnblogs.com/arduka/p/13337018.html
Copyright © 2011-2022 走看看