预解析的时间顺序
以前的课程说到预解析时,说过预解析会对function声明的函数进行预解析,所以预解析时全局作用域中应该就已经创建了函数demo,
同时test内部函数应该也会被预解析,也就是test函数也被创建了,应该会进入到内存中的代码段中,此时a的值如果输出也应该为undefined,
所以我以为多次调用demo函数返回的应该都是那个预解析时创建的test才对,但是如上图,最后输出为false,
说明demo每执行一次,就会创建一个新的test,
然后我又执行了下面代码:
输出:
我3次创建子函数test,3次变量a都被预解析了,但是我创建子函数明明是在代码执行阶段执行的,不是在预解析阶段,他是如何完成预解析的呢?
正在回答
你好,
1、即使是全局函数中的局部变量,也不是在预解析时就会被预解析的,而是在函数执行过程中才会连同子函数一起被预解析,这句话理解的没问题。
2、全局函数在预解析阶段,它的函数体会进入到内存的代码段存储起来。
祝学习愉快!
同学你好,在预解析的地方理解的有问题:
1、全局中的预解析只会提升全局函数,不会预解析解析函数中的内容,当函数被调用的时候才会预解析函数中的内容。所以在demo没有调用之前预解析的时候test函数不会提升,a也不会被赋值为undefined。
2、每次调用demo方法都会预解析一遍函数中的内容,然后再执行代码,会创建不同的作用域,因为引用类型是不相等的。在不同的作用域中预解析的时候a变量提升为undefined,所以在赋值之前输出的结果都是undefined。
3、会在每个不同作用域中预解析,而不是在全局中预解析的哦,不会被覆盖。
祝学习愉快!
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星