您的位置:首页 > Web前端 > HTML

HTML DOM方法:setTimeout与setInterval

2015-07-23 10:48 501 查看
javascript都是以单线程的方式运行于浏览器的javascript引擎中的,setTimeout和setInterval的作用只是把你要执行的代码以你设定的一个时间点插入js引擎维护的一个代码队列中,插入代码队列并不意味着你的代码就会立马执行。

setTimeout

function click() {
// code block1...
setTimeout(function() {
// process ...
}, 200);
// code block2
}

调用click()的时候,首先执行block1的代码,然后运行到setTimeout的时候,setTimeout告诉浏览器说:200ms后会在队列中插入一段代码。浏览器当然答应了(注意插入代码并不意味着立马执行),setTimeout代码执行后,block2开始执行。若block2的执行时间超过200ms,浏览器会在200ms处插入process,但必须等到block2执行完才执行process。若block2的执行时间不到200ms,浏览器会在200ms处插入process并且立马执行。

setInterval

存在的问题:(1)时间间隔可能会跳过(2)时间间隔可能会小于定时调用的代码的执行时间

function click() {
// code block1...
setInterval(function() {
// process ...
}, 200);
// code block2
}

调用click()程序,block1代码执行完,在5ms时执行setInteval,告诉浏览器每隔2000ms插入process代码,当block2执行完(在200ms内),process开始执行,若process执行的时间很长,超过了405ms的时间点,但是在405ms处会插入一份process代码,process继续执行者,而且超过了605ms的时间点。但是此时代码队列中不会插入一根process代码,因为代码队列中已经有了一份未执行的process代码,所以605ms这个插入时间点将会被跳过,因为js引擎只允许有一份为执行的process代码。

解决这个问题的方法:

setTimeout(function(){
process;
setTimeout(arguments.callee,interval);
},interval);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: