SetTimeout(延迟计时器)

SetTimeout(延迟计时器)

延迟计时器

   延迟多少时间执行,执行函数的操作,而且只执行一次
   setTimeout()
      第1个参数: 函数
      第2个参数: 延迟时间 单位是ms 
   清除延时计时器
      clearTimeout();

最小时间为 4 毫秒,setTimeout是宏任务,需要到下次Loop,才能调用;
setTimeout 的返回值是一个数字,这个值为timeoutID
// 如果当前任务执行时间过久,会延迟到期定时器任务的执行

function bar() {
    console.log('bar')
    const endTime = Date.now()
    console.log('cost time',endTime - startTime)
}
function foo() {
    setTimeout(bar, 0);
    for (let i = 0; i < 5000; i++) {
        let i = 5+8+8+8
        console.log(i)
    }
}
foo()
// 使用 setTimeout 设置的回调函数中的 this 环境不是指向回调函数

var name= 1;
var MyObj = {
  name: 2,
  test:1,
  showName: function(){
    console.log(this.name,this.test);
  }
}
setTimeout(MyObj.showName,1000)
MyObj.showName()
// 先输出 2 1
// 1s后输出 1 undefined 

const fn = MyObj.showName
setTimeout(fn,1000)

在setTimeout里面,当执行到的时候,实际上就是在window下执行fn,此时的this,就指向了window,而不是原来的函数。
// setTimeout 存在嵌套调用问题


let startTime = Date.now()
function cb() { 
  const endTime = Date.now()
  console.log('cost time',endTime - startTime)
  startTime = startTime
  setTimeout(cb, 0); 
}
setTimeout(cb, 0);
// 未激活的页面,setTimeout 执行最小间隔是 1000 毫秒

目的是为了优化后台页面的加载损耗以及降低耗电量。这一点你在使用定时器的时候要注意。
// 延时执行时间有最大值 2147483647

Chrome、Safari、Firefox 都是以 32 个 bit 来存储延时值的,32bit 最大只能存放的数字是 2147483647 毫秒,这就意味着,如果 setTimeout 设置的延迟值大于 2147483647 毫秒(大约 24.8 天)时就会溢出,这导致定时器会被立即执行

let startTime = Date.now()
function foo(){
  const endTime = Date.now()
  console.log('cost time',endTime - startTime)
  console.log("test")
}
var timerID = setTimeout(foo,2147483648);//会被立即调用执行
// 每隔1秒执行一次,执行10次
function timer(timeout) {
    let i = 0;
    // let t;
    time();
    function time() {
        if (i < timeout) {
            console.log(i);
            i++;
            setTimeout(time, 1000);
        } else {
            return;
        }
    }
}
timer(10);
SetTimeout(延迟计时器)
上一篇:使用SetTimeout模拟/模仿SetInterVal(JavaScript)


下一篇:setTimeout 是到了xx ms 就执行吗,了解浏览器的 Event-Loop 机制