• JS 函数的执行时机


    JS函数的调用时机不同,得到的结果不同。

    setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式。意思就是尽快,而不是马上。

    1、解释为什么如下代码会打印 6 个 6

    let i = 0
    for(i = 0; i<6; i++){
      setTimeout(()=>{
        console.log(i)
      },0)
    }
    
    因为setTimeout是一个异步任务执行到这里的操作会被浏览器丢到另一个任务队列里去浏览器这时候会继续往下执行把下面的代码都执行完了才会来执行setTimeout函数里的操作这时候因为for循环已经把i加到6了所以输出的全部都是6.
    

     

    如何理解异步呢?

    异步代码不等待结果,直接进行下面的代码,所以定时器只是开启了,而没有立即执行里面的代码,等到当前运行坏境的代码执行完之后再回来执行定时器里面的代码。

     

    2 、写出让上面代码打印 0、1、2、3、4、5 的方法

    for(let i = 0; i<6; i++){
      setTimeout(()=>{
        console.log(i)
      },0)
    }
    
    因为let变量的作用域只能在当前函数中所以每次for循环生成的都是一个新的isetTimeout里输出的i就是这个新的i这个i是不会变化的所以输出的就是正常的


    3、除了使用 for let 配合,还有什么其他方法可以打印出 0、1、2、3、4、5。

    1闭包
    
    let i 
    for(i = 0; i<6; i++){
      !function(j){
          setTimeout(()=>{
            console.log(j)
          },0)
      }(i)
    }
    
    2利用 setTimeout 的第三个参数,将i传进去
    let i
    for(i = 0; i<6; i++){
        setTimeout((value)=>{
          console.log(value)
        },0,i)
    }
    
    3利用 const 关键字
    let i
    for(i = 0; i<6; i++){
        const x = i
        setTimeout(()=>{
          console.log(x)
        })
    }
  • 相关阅读:
    springboot 搭建druid数据监控
    spring-boot编写简易mvc
    解决rabbitmq 开启启动报错
    intelij idea 使用maven打包报错 Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1
    php foreach循环引用的问题
    手把手编写hyperf JsonRpc demo
    centos8配置nfs教程本机系统mac
    Java基础的练习题
    Java——循环
    Java——数组
  • 原文地址:https://www.cnblogs.com/fanjiawen/p/14516293.html
Copyright © 2020-2023  润新知