setTimeout基本介绍

语法

setTimeout (要执行的代码,等待毫秒数)

举例

setTimeout(()=>(console.log("我一秒钟之后才会打印")),1000)

该示例代码的效果就是在运行一秒钟之后在控制台输出“我一秒钟之后才会打印”

需要注意的是 setTimeout 只会执行一次,如果需要一直循环持续执行可以采用递归法又或者是采用

setInterval 二者语法相同,但是setInterval会循环执行。

setTimeout的执行机制

在一些循环代码中如果用到setTimeout则需要仔细考虑延迟代码的执行时机。

let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{
  console.log(i)
},0)
}

以依次打印0,1,2,3,4,5为例

当我们采用上述代码时,由于setTimeout在for循环之中,当执行代码时,JS引擎会先执行6次循环代码,setTimeout中的代码并未在此时执行。当for循环执行结束之后,setTimeout代码就会执行6次,而此时i=6所以控制台会打印6个6。这与我们的目的是不符的。

正确代码

let i = 0
setTimeout(()=>{
for (i=0;i<6;i++){
  console.log(i)
}
},0)

setTimeout包含for循环代码之后就是则是在设定延时之后直接循环打印i