javascript:定时器的调用
程序员文章站
2022-06-08 18:16:43
...
没错,我又来水文章了,定时器的使用时很多人都喜欢用到的,很多人都绝得很是酷炫。也根据这个,以为了js是多线程的。其实不是的,大家都以为使用了定时器之后,是将定时器内部的代码在指定的时间后执行,只不过很抱歉,我以前也是这样绝得的,后面被高级虐了下。才知道原来定时器是将代码插入,而不是执行,怎么说?比如下面这段代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script>
var i = 0;
mytime();
// for(var j = 0; j < 10000; j++) {
// console.log(j);
// }
function mytime() {
i++;
var mydate = new Date();
console.log(mydate.toJSON())
if(i > 10) {
return false;
}
setTimeout(function() {
mytime();
}, 10);
}
</script>
</body>
</html>
现在执行完之后,返回的是这样的:
看得出大概是按照我们预想的,但是也有些延迟,弹是这不足以表明我的观点,但是请注意,第一个跟第二个的时间差距是15ms,现在将注释的取消掉试试?
第一个的时间是01秒499ms的时候
第二个的时间是:
02秒91ms的时候,两个的差距大概是590ms,而其余的都是差不多的,如果不信。我们可以试试循环1w次?
大概就是这样,水了一片文章,主要是想说:
定时器对队列的工作方式是,当特定时间过去后将代码插入。注意,给队列添加代码并不意味着对
它立刻执行,而只能表示它会尽快执行。设定一个 150ms 后执行的定时器不代表到了 150ms代码就立刻
执行,它表示代码会在 150ms 后被加入到队列中。如果在这个时间点上,队列中没有其他东西,那么这
段代码就会被执行,表面上看上去好像代码就在精确指定的时间点上执行了。其他情况下,代码可能明
显地等待更长时间才执行。
资料来源:《javascript高级程序设计》
上一篇: 返回栈中最小元素&递归逆序栈
下一篇: 解疑惑,板栗可以生吃吗?