美文网首页
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、每天一道前端题

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

  • map、parseInt

    在牛客刷题的时候,遇到YY前端的一道题,有点意思,写下来分享 [“1", "2", "3"].map(parseI...

  • 每天一道乐理题1

  • 每天一道算法题1

    【小和问题】在一个数组中,每一个数左边比当前数小的数累加起来,叫做这个数组的小和。求一个数组的小和例子:[1,3,...

  • LeetCode:罗马数字转整数

    About 之前我制定的学习计划是每天一道LeetCode题,因为个人认为前端不需要多好的算法功底,我只是想通过做...

  • 开始计划

    1.每天一道算法题,并总结归纳2.参加go开源项目

  • 每天一道JavaScript算法题(1)

    Implement the function unique_in_order which takes as arg...

  • 从一道阿里数组笔试题理解常用数组方法

    这是阿里2017秋季校招前端的一道笔试选择题: A选项:a.reverse()后返回值即数组a变成[3,2,1],...

  • 关于setTimeout的面试题

    经常看到网上的前端面试题中会有关于setTimeout的这道题,这题经常有人写,一道题包含了javascript ...

  • 刻意练习

    1.刻意练习很痛苦,但是很有用 记得在最开始培训的时候,2个月时间几乎每天都输出1万字,一道题一道题死磕,一个类型...

网友评论

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

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