JavaScript 函数执行时机

119 阅读1分钟

JavaScript 函数执行时机

前言: 涉及内容

  1. js 代码的疑惑之为什么会打印 6 个 6
  2. 其他方法


js 代码的疑惑之为什么会打印 6 个 6

  1. setTimeout 是延迟执行的,for 循环是立即实行的,并且 for 循环中的 i 是全局变量,前面没有声明任何 var 或者 let。当 for 循环完成后,才会执行 setTimeout,所以是 6, 当 i=5 的时候,执行循环体,然后进行 i++操作,此时是 6。

<!-- 请看如下代码 -->
let i = 0
for(i = 0; i<6; i++){
  setTimeout(()=>{
    console.log(i)
  },0)
}
  1. 让上述代码打印出 0,1,2,3,4,5。 只需让 for 循环与 let 配合使用即可,let的作用域是{},每次循环就开启一个新的作用域(总共开启了6次)
for (let i = 0; i < 6; i++) {
  setTimeout(() => {
    console.log(i);
  }, 0);
}
  1. 除了可以使用 for let 配合,还有什么方法可以打印出 0,1,2,3,4,5,使用闭包,除了用()括起来,还可以使用+ -,~,推荐使用! 使用() 如果上面有 console.log 请注意结尾要有';' 进行隔断,推荐使用!
for (var i = 0; i < 6; i++) {
  !(function (j) {
    //闭包
    setTimeout(function () {
      console.log(j); //分别输出i的值
    }, 0);
  })(i); //闭包
}