setInterval和setTimeout执行事件测试

如果使用setInterval函数每100ms执行一段代码,中间有一次任务执行时间为1000ms,那么这次任务后会连续执行10次代码吗(即setInterval的任务会堆积吗)

为了测试这个问题,写了下面的代码,测试结果见控制台输出。

    <script>
        startInterval();
        //测试setInterval函数做的执行机制
        function startInterval() {
            var time = 0;
            var now=Date.now();
            console.log("------startInterval,", now);
            var tId = setInterval(() => {
                let i = 0;
                while (i < 20000000) {
                    if (time < 10) {
                        let reg = "gfdshtretyhgfdjhgf".replace(/>?=q/g, "");//加入正则为了消耗性能
                    }
                    i++;
                }
                console.log("setInterval,", Date.now()- now);
                now=Date.now();
                time++;
                if (time == 15) {
                    clearInterval(tId)
                    startTimeOut();
                }
            }, 1000)
        }
         //测试startTimeOut函数做的执行机制
        function startTimeOut() {
            var time = 0;
            var now=Date.now();
            console.log("------startTimeOut,", now);
            for(time=0;time<15;time++){
                var tId = setTimeout(() => {
                    let i = 0;
                    while (i < 200000000) {
                        if (time < 10) {
                            let reg = "gfdshtretyhgfdjhgf".replace(/>?=q/g, "");//加入正则为了消耗性能
                        }
                        i++;
                    }
                   
                    console.log("setTimeOut,",Date.now()- now);
                    now=Date.now();
                }, 1000)
            }
        }

    </script>

 

   

 

posted @ 2021-04-23 13:51  方帅  阅读(140)  评论(0)    收藏  举报