欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

setTimeout 的一点理解

程序员文章站 2024-01-01 09:33:58
...

setTimeout,延时触发。
用法示例

setTimeout(`console.log(1)`,1000);
setTimeout(()=>{console.log(1)},1000);

首先,理解 setTimeout 是一个函数方法,接收两个参数,会异步加载传入的函数。

function cslog(){
  setTimeout(`console.log(5)`,3000)
};
console.log(1);
cslog();
setTimeout(`console.log(2)`,2000);
setTimeout(`console.log(3)`,1000);
console.log(4);

//返回的结果依次为1,4,3,2,5
//由于异步,所以先执行1,4,再执行3,2,5,
//注意,这里的 5 最后执行

ok,这里谈谈最后打印 5 。
我的理解是,setTimeout 所谓异步,会将所有传入的函数放在同一个作用域下,然后根据延时的时间依次执行。

还有一点,setTimeout 会返回一个数字,作为异步执行的一个标识,可以通过clearTimeout 这个值,让其不执行,并且这个值是全局的,可以在同页面的任何地方操作,这点用的多的应该是 setInterval 及 clearInterval。

let timer;
function a(){
  timer = setTimeout(()=>{console.log(1)},10000); //10s 后打印1
};

function b(){
  a();
  console.log(2)
};

clearTimeout(timer) ;

以上,我们知道可以取消10s后的打印,感觉是将 setTimeout 赋值给 timer,timer 是全局的,但是,但是,但是,这里的 timer 是 number,也就是说,只需要知道 number 的值,我们就可以直接 clearTimeout(number) 达到同样的效果。

所以,可以这样理解 setTimeout,每次进行 setTimeout 会生成一个状态并给这个状态一个编号,并且这个编号是连续的,当主路上的代码执行完后,才开始执行所有的异步代码,所有的异步代码,通过设定的延时时间分先后同步执行。

function cslog(){
  setTimeout(`console.log(5)`,1000)
};
console.log(1);
cslog();
setTimeout(`console.log(2)`,1000);
setTimeout(`console.log(3)`,1000);
console.log(4);

//打印结果1,4,5,2,3
//延时都为1s,异步后,代码又得按同步规则进行执行

所以,这个会怎样输出呢?

function a(){
  setTimeout(()=>{
    setTimeout(()=>{
      console.log(1)
    },1000)
  console.log(2)
  },2000)
};

setTimeout(()=>{console.log(3)},3000);
a();

//**************************************************************************************************2 3 1

上一篇:

下一篇: