单线程与计时器

[转]http://m18659257646.blog.163.com/blog/static/237824031201482913814505/
计时器:
setTimeout(conFun, 2000); 
隔XXX毫秒后执行一次
setInterval(conFun, 1000);
每隔XXX毫秒后执行一次

timer = setInterval(function(){sport(attri);}, 50);
timer = setInterval("sport(attri)", 50);
timer = setInterval(sport, 50);
timer = setInterval(sport(attri), 50); 
只执行一次,计时器不起作用了。

计时器清除:
timer = setTimeout(conFun, 2000);   
clearTimeout(timer);

timer = setInterval(conFun, 1000);   
clearInterval(timer);

单线程:
就是说同一时间只能做一件事,在单线程里设置计时器,运行代码时,仅仅是把计时器的代码添加到了运行队列等待执行,而不是执行代码,执行的时间有可能是延后,或者提前.

setInterval的引擎处理:
当队列中没有该定时器的其它代码实例时,才能将新的定时器代码添加到队列中.
由于线程的原因,可能会造成的问题:
1、某些间隔会被跳过
2、多个定时器的代码执行之间的间隔可能会比预期的小

JS的引擎是单线程,强制所有的异步事件排队等待执行.
setTimeout 和setInterval在执行异步代码的时候存在根本的不同:
如果一个计时器被阻塞而不能立即执行,那么它将延迟执行,直到下一次执行的时间点才被执行(即比期望的时间间隔要长);
如果setInterval中的回调函数的执行时间足够长,比指定的时间间隔长,她们将连续执行并且彼此之间没有时间间隔.

猜你喜欢

转载自1042703214.iteye.com/blog/2317390
今日推荐