有问题请教老师

有问题请教老师

# 具体遇到的问题
老师你好, 下面给出的代码中,第一个console打印出来的是undefined, 第二个是2, 能讲一下代码的执行顺序吗? 
# 粘贴全部相关代码,切记添加代码注释(请勿截图)

​var a = 1;


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

var a = 2;

console.log(a);

};

fn();


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕星星 2020-12-28 09:49:09

同学你好,理解的有点问题。函数在调用的时候才会预编译函数内的代码。所以一开始全局预编译的时候,只有全局的a变量赋值为undefined提升,fn函数提升。

当代码从上到下执行到最后,fn函数调用的时候,才开始预编译fn函数中的内容。声明的a变量赋值为undefined,提升到函数顶部,所以从上到下执行函数内代码的时候,输出a为undefined,a赋值为2之后,输出a为2 。

祝学习愉快!

提问者 粉墨登场 2020-12-27 22:04:10

噢老师我知道了,你看下是不是这样的: 代码从上到下执行,函数外的var 变量赋值为undefined,看到有function定义的函数,将函数名保存在内存中,并且将函数内使用var 定义的变量赋值为undefined, 这时执行这个函数,所以第一个函数为undefined, 接着a就等于2,第二次打印为2。 老师应该是这个执行顺序吧? 

  • 提问者 粉墨登场 #1

    还有老师,代码执行之前将函数内的局部变量和函数外的全局变量定义为undefined,并将function定义的函数提升并将函数名保存在内存中。这是JS的预编译吧?

    2020-12-27 22:09:17
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师