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

JS的两个定时器setInterval()和setTimeout()的细节问题

2019-01-30 13:49 751 查看

JS中的两个定时器

JavaScript中有两个定时器

  • setInterval( “fn()”, millisec );
    在millisec时间后第一次执行fn()代码段,之后每隔millisec时间便再执行一次fn()代码段,直到遇到clearsetInterval( fn );语句停止循环。
  • setTimeout( “fn()”,millisec );
    在millisec时间后,执行fn()代码段,并且只执行一次。之后定时器虽然没有用了,但依然存在并占用空间,建议用clearTimeout()将其清除。通常将setTimeout嵌入fn()代码段内实现循环,此时与setInterval的区别是先执行一遍代码,之后才开始计时循环执行。

setInterval()

setInterval()是否影响程序的执行顺序?

var fn1 = function(){
console.log('你好');
}
var timer1 = setInterval("fn1()",1000);
console.log('再见');

结果是,先输出“再见”,1s后输出“你好”,之后每1s输出一次“你好”。
可见,即使setInterval在循环,下面程序也依然执行下去;若在末端加上

clearInterval(timer1);
,结果只输出“再见”。

setInterval()的返回值

var fn1 = function(){var a = 1;},
fn2 = function(){var b = 2;},
timer1 = setInterval("fn1()",1000),
timer2 = setInterval("fn1()",1000),
timer3 = setInterval("fn2()",1000);
console.log("timer1"+"====="+timer1);
console.log("timer2"+"====="+timer2);
console.log("timer3"+"====="+timer3);
clearInterval(timer2);
console.log("timer1"+"====="+timer1);
console.log("timer2"+"====="+timer2);
console.log("timer3"+"====="+timer3);


可见setInterval()返回值相当于一个Id,每次执行都会产生一个特定的Id,返回值为数字,从一开始逐次累加。可以根据这个id值用clearInterval()将其清除。

setTimeout()

setTimeout()是否影响程序的执行顺序?

var timer2
var fn2 = function(){
console.log('你好');
timer2 = setTimeout("fn2()",1000);
};
fn2();
console.log('再见');

结果是,先输出“你好”以及“再见”,之后每1s输出一次“你好”。
可见,即使setTimeout()在循环,下面程序也依然执行下去;若在末端加上

clearTimeout(timer2)
,结果只输出“你好”和“再见”。

setTimeout()的返回值

var timer
var fn = function(){
console.log("hello world!====="+timer);
timer = setTimeout("fn()",1000);

};
fn();
setTimeout("clearTimeout(timer);console.log('end----------')",10000);


可见,setTimeout()返回id的同时,还返回了一个执行次数?

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: