js定时器的几种写法

setTimeout()

设定一个定时器,在指定时间后执行一段代码。

let timeoutId = setTimeout(func,delay,param1,param2,……);
  • timeoutId:为此定时器的id,此id可以传入clearTimeout()来取消这次定时器
  • func:为指定时间后执行的函数
  • delay:是延迟的毫秒数。
    如果省略的话,默认取值0。
  • param:向延迟函数传递而外的参数,IE9以上支持

this问题

由于setTimeout()调用的代码运行在与所在函数完全分离的执行环境上. 这会导致,这些代码中包含的 this 关键字会指向 window (或全局)对象,这和所期望的this的值是不一样的.

解决方案:使用bind()来绑定当时所处环境的this

最小延迟

当设置的delay时间小于浏览器的最小延迟时间时,浏览器就会强制使用最小延迟时间。这个最小延迟时间一般为4ms。

setInterval()

以给定的时间间隔重复执行一个函数。

var intervalID = window.setInterval(func, delay[, param1, param2, ...]);

这里的参数的含义与setTimeout相同。

可以使用setTimeout来完成setInterval的工作,这样做的好处是,setTimeout保证了每次执行完当前函数中的操作再进行下一次定时任务,而setInterval不会保证上一次任务执行完毕再添加下一次任务。

setImmediate()

该方法用来把一些需要长时间运行的操作放在一个回调函数里,在浏览器完成后面的其他语句后,就立刻执行这个回调函数。类似setTimeout(func, 0)

var immediateID = setImmediate(func, [param1, param2, ...]);
  • immediateID 是这次setImmediate方法设置的唯一ID,可以作为 clearImmediate 的参数.
  • func 是将要执行的回调函数

该方法可以用来替代 setTimeout(0) 方法来滞后完成一些需要占用大量cpu时间的操作.下面的JavaScript可以用来兼容那些不支持setImmediate方法的浏览器:

if (!window.setImmediate) {
  window.setImmediate = function(func, args){
    return window.setTimeout(func, 0, args);
  };
  window.clearImmediate = window.clearTimeout;
}

requestAnimationFrame

专门为实现高性能的帧动画而设计的API,但是不能指定延迟时间,而是根据浏览器的刷新频率而定(帧).

如果你想做逐帧动画的时候,你应该用这个方法。这就要求你的动画函数执行会先于浏览器重绘动作
通常来说,被调用的频率是每秒60次,但是一般会遵循W3C标准规定的频率。

var requestId = window.requestAnimationFrame(func);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值