目录
  1. 1. 定时器真是定时执行的吗?
  2. 2. 定时器回调函数是在分线程执行的吗?
JS定时器真的是定时执行么?

定时器真是定时执行的吗?

定时器并不能保证真正定时执行

  • 一般会延迟一丁点(可以接受)
  • 也有可能延迟很长时间(不能接受)

那么什么情况可以接受,什么情况下不能接受呢?

document.getElementById('btn').onclick = function () {
var start = Date.now()
console.log('启动定时器前...')
setTimeout(function () {
console.log('定时器执行了', Date.now()-start)
}, 200)
console.log('启动定时器后...')

这种情况的出现一定的延迟,而且延迟很低,是可以接受的

document.getElementById('btn').onclick = function () {
var start = Date.now()
console.log('启动定时器前...')
setTimeout(function () {
console.log('定时器执行了', Date.now()-start)
}, 200)
console.log('启动定时器后...')

// 做一个长时间的工作
for (var i = 0; i < 1000000000; i++) {

}

我要的是200,你给我800,又不是人民币,我干嘛要接受。

  • 定时器并不真正完全定时
  • 如果在主线程执行了一个长时间的操作, 可能导致延时才处理

定时器回调函数是在分线程执行的吗?

在主线程执行的, js是单线程的

setTimeout(function () {
console.log('2s定时器')
alert('2s定时器')
}, 2000)
setTimeout(function () {
console.log('1s定时器')
alert('1s定时器')
}, 1000)
setTimeout(function () {
console.log('立即执行定时器')
}, 0)
function fn() {
console.log('fn()')
}
fn()

console.log('alert()之前')
alert('------') //暂停当前主线程的执行, 同时暂停计时, 点击确定后, 恢复程序执行和计时
console.log('alert()之后')

文章作者: Jachie Xie
文章链接: https://xjc5772.github.io/2020-04/14/%E5%AD%A6%E4%B9%A0/%E5%89%8D%E7%AB%AF%E5%AD%A6%E4%B9%A0/JS/JS%E5%AE%9A%E6%97%B6%E5%99%A8%E7%9C%9F%E7%9A%84%E6%98%AF%E5%AE%9A%E6%97%B6%E6%89%A7%E8%A1%8C%E4%B9%88%EF%BC%9F/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 XJC&Blog
打赏
  • 微信
  • 支付宝

评论