setTimeout定时器启动时刻测试

function formatDate(date){
	date = date || new Date();
	console.log(date.getFullYear()+"-"+(date.getMonth()+1)+date.getDate()+" "+date.getHours()+":"+date.getMinutes()+":"+date.getSeconds()+":"+date.getMilliseconds());
}

var timer ;
function test(){
		
	timer = setTimeout(function(){
			formatDate();
			console.log('timeout');
	},10000);
	
	var startDate = new Date();
	var now = new Date();
	
	for(var i =0; i<5; i++){
		formatDate(startDate);
		// 5 second
		while(new Date () - startDate < 5*1000){
			
		}

		startDate = new Date();
	}
	
	formatDate();
	console.log('test finished');
}

test();

 

猜想:

A.定时器timeout启动时刻为JS运行时执行到setTimeout时开始,

B.定时器timeout在JS运行时执行完主逻辑后开始计时

 

针对如上测试用例,我们发现主逻辑大概执行5×5=25秒,定时器设定为10秒后执行,

如果猜想A成立,那么主逻辑执行完毕以后,基本上立刻执行定时器逻辑,无需等待

如果猜想B成立,那么主逻辑执行完25秒后,再过10秒执行定时器逻辑

 

在chrome下测试,发现A逻辑成立

 

如果将定时器时间间隔设置为30秒,那么主逻辑执行完毕以后,大概过5秒,执行定时器逻辑,进一步验证A猜想成立

 

在整个过程中,其实不难发现,setTimeout能够保证回调逻辑在timeout设置时间后执行,与setInterval相比,起码保证了最小时间间隔

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值