javascript:定时器的调用

没错,我又来水文章了,定时器的使用时很多人都喜欢用到的,很多人都绝得很是酷炫。也根据这个,以为了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高级程序设计》
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值