欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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>

现在执行完之后,返回的是这样的:

javascript:定时器的调用

看得出大概是按照我们预想的,但是也有些延迟,弹是这不足以表明我的观点,但是请注意,第一个跟第二个的时间差距是15ms,现在将注释的取消掉试试?

javascript:定时器的调用

第一个的时间是01秒499ms的时候

第二个的时间是:

javascript:定时器的调用

02秒91ms的时候,两个的差距大概是590ms,而其余的都是差不多的,如果不信。我们可以试试循环1w次?

大概就是这样,水了一片文章,主要是想说:

定时器对队列的工作方式是,当特定时间过去后将代码插入。注意,给队列添加代码并不意味着对
它立刻执行,而只能表示它会尽快执行。设定一个 150ms 后执行的定时器不代表到了 150ms代码就立刻
执行,它表示代码会在 150ms 后被加入到队列中。如果在这个时间点上,队列中没有其他东西,那么这
段代码就会被执行,表面上看上去好像代码就在精确指定的时间点上执行了。其他情况下,代码可能明
显地等待更长时间才执行。

资料来源:《javascript高级程序设计》