美文网首页
1、每天一道前端题

1、每天一道前端题

作者: 4691a48010dd | 来源:发表于2020-05-07 15:12 被阅读0次
    题目

    思考当前代码执行后输出什么内容

    》》》

    》》》

    》》》

    》》》

    》》》

    》》》

    》》》

    》》》

    》》》

    》》》

    》》》

    》》》

    》》》

    》》》

    》》》

    》》》

    》》》

    》》》

    答案

       打印顺序: undefined   3  1  2

        这里主要涉及到的知识点有setTimeout 执行的问题和变量提升的问题。

        首先setTimeout 虽然在代码最前面被先执行,并且第二个参数也没有设置时长,但打印的却是最后一行a变量赋值为2后的值,因为js是单线程执行,尽管setTimeout并没有设置时长,它还是会等其他代码执行完以后再执行里面的回调函数,所以setTimeout方法会是最后一个执行。

        从代码拓展一个作用域链的知识点,setTimeout的回调函数中没有定义过a变量,它会一直往上一层的作用域中进行查找,一直到找到window结束,当前setTimeout的回调函数中打印的a是来自window作用域中的a,window作用域中的a执行到代码结束时已经被赋值为2,所以它才会打印2

        第二个console为什么打印undefined,var关键词声明的变量会出现变量提升,提升到当前作用域的最前面,默认值为undefined,直到执行赋值代码才会产生有效值,我们第二个console在赋值语句之前执行,还是未赋值的状态,所以打印的是undefined

        如果我们把var关键词换成let会是什么效果,好奇的可以自己尝试一下

    相关文章

      网友评论

          本文标题:1、每天一道前端题

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