关于javascript的预解析

来源:1-1 初识JavaScript

weixin_慕圣6334738

2021-03-07 21:39:42

http://img.mukewang.com/climg/6044d6df09f246e910460306.jpg

老师你好,

针对上述图片(灰色字体为打印结果),我的问题是:

既然javascript会对带var的变量进行预解析,那为什么第一个fn()打印出来的不是 undefine,而是 2。

图片中打印的结果是怎么定的?



写回答

1回答

好帮手慕慕子

2021-03-08

同学你好,可以参考如下解析理解:

1、因为如果存在函数名和变量名相同的情况下,函数优先提升,而同时有多个函数时,后面的会覆盖前面的,所以预解析阶段函数function fn() {console.log(2);}会提升到最前面。

2、代码按着从上到下的顺序执行,由第一条可知,提升在最前面的是function fn() {console.log(2);},所以第一次执行fn() 输出结果为2

3、代码在执行阶段会跳过函数声明,即:会跳过function fn() {console.log(1)}, 所以后面执行fn()输出的结果依然为2

4、执行var fn = 10;这句代码时,相当于将fn重新赋值为10,所以此时的fn是一个数值,不再是一个函数了,那么使用函数调用的方式fn()会出现报错。

5、代码执行过程遇到报错就会结束,停止向后运行了。所以最终的输出结果是2 2 报错

有关变量和函数预解析,在https://class.imooc.com/lesson/1620#mid=36928 和https://class.imooc.com/lesson/1625#mid=37386  这两节课中有详细的讲解,同学到时候可以重点了解学习下。

祝学习愉快~

0

0 学习 · 15276 问题

查看课程