美文网首页
JS 函数的执行时机

JS 函数的执行时机

作者: 卢卢2020 | 来源:发表于2021-01-21 00:07 被阅读0次

    函数执行时机不同,运行结果也不同 

     同步任务:

    上一件事情没有完成,继续处理上一件事情,只有上一件事情完成了,才会做下一件事情 –> JS中大部分都是同步编程。

    同步

        let a =1

        function fn(){console.log(a)}

        a=2

        fn()

    按步骤执行

        1 将声明变量a并赋值为1

        2 声明函数fn

        3 将2赋值给a

        4 执行fn() 打印出a并结束 

     异步任务:

    规划要做一件事情,但是不是当前立马去执行这件事情,需要等一定的时间,这样的话,我们不会等着他执行,而是继续执行下面的操作。

    异步

        let a=1

        function fn(){ setTimeout(()=>{ console.log(a) },0) }

        fn()

        a=2

    执行步骤

        1 声明变量a并赋值

        2 声明函数fn (不看略过看下一步)

        3 并执行fn() setTimeout为异步等待(跳到下一步)

        4 将a重新赋值=2

        5 所以步骤操作完了 然后来执行setTimeout() 打印出a //2 结束


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

    let i=0

    for(i=0;i<6;i++){

        setTimeout(()=>{

            console.log(i)

        },0)    

    }

    答:个人理解=>  在for循环中 先执行for循环第一行i=0 满足条件 执行i<6 满足条件执行里面内容( 里面内容遇到setTimeout() 由于它是定时器 需要等待执行" 即使设置它的值为0s,也是在for循环结束之后再执行的" )跳过serTimeout内容继续执行i++ 满足条件下一轮循环(后面循环遇到setTimeout同第一次一样跳过先不执行)直到i为6时 它不满足i<6的条件 退出for循环 再来执行setTimeout 执行时它的值为6 所以它得到的结果为6个6。

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

    用let语法  (let为了满足新人的幻想出的奇葩的复制语法)

    for(let i=0;i<6;i++){
        setTimeout(()=>{

        console.log(i)  // 1,2,3,4,5,6

        })
    }

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

    for(var i=0;i<6;i++){

    console.log(i)  用var 不配合setTimeout使用也可以

    }

    相关文章

      网友评论

          本文标题:JS 函数的执行时机

          本文链接:https://www.haomeiwen.com/subject/gaelzktx.html