Javascript定时器setTimeout(),setInterval()

js定时器

定时器在页面中比较常用,特别是显示日期,自动轮播方面。

setTimeout()

setTimeout()有两个参数,第一个参数为执行的函数,第二个参数为时间间隔(单位毫秒),如下代码:1000毫秒后,执行一次函数后销毁。

setTimeout(function () {
    console.log(1)
},1000)
setInterval()

setInterval()有两个参数,第一个参数为执行的函数,第二个参数为时间间隔(单位毫秒),如下代码:每隔1000毫秒,执行一次函数,num自增1。

var num = 0;
setInterval(function () {
    num++;
    console.log(num)
},1000);

setInterval()在没有清除定时器时会一直执行,因此,很多情况下都需要清除定时器。

var timer = null;
var num = 0;
timer = setInterval(function () {
    num++;
    console.log(num);
    if(num == 4){
        clearInterval(timer)  //当num=4时清除定时器
    }
},1000);
//clearInterval(timer)    //执行1次后清除定时器

其他用法

setTimeout()也可以做成clearInterval()一样的效果,如果需要清除定时器,可以在第五行设置条件。

var num = 0;
function log() {
    num++;
    console.log(num);
    setTimeout(log,1000)
}
setTimeout(log,1000)

传参

在使用定时器时,有时会用到执行函数传参,可以考虑用函数的bind()来解决。bind的第一个参数是this指向,如果在你的执行函数中有使用this时一定要注意,你传入的this是否正确。后面的参数为log(执行的函数)的参数。

function log(msg) {
    console.log(msg);
}
setTimeout(log.bind(this,'这是一段消息'),1000);
setInterval(log.bind(this,'重复输出这段消息'),1000)
setInterval()传参时遇到的问题

在使用一个定时器每隔1s自增num,另一个定时器每隔1s传入num执行打印,但打印出来的参数始终为0。


var num = 0;
function log(i) {
    console.log(i)
}
function count(){
    num++
}
setInterval(count,1000);						//每隔1s,num自增1
setInterval(log.bind(this,num),1000);	//每隔1s,执行log打印传入的参数

解决方法:setInterval(log.bind(this,num),1000);这句中的num一直没有变,考虑使用setTimeout()回调来解决。代码如下:

var num = 0;
function log(i) {
    console.log(i);
    setTimeout(log.bind(this,num),1000);
}
function count(){
    num++
}
setInterval(count,1000);
setTimeout(log.bind(this,num),1000);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值