预解析的时间顺序

预解析的时间顺序

http://img1.sycdn.imooc.com//climg/5d426b7b0001c56510490613.jpg

以前的课程说到预解析时,说过预解析会对function声明的函数进行预解析,所以预解析时全局作用域中应该就已经创建了函数demo,

同时test内部函数应该也会被预解析,也就是test函数也被创建了,应该会进入到内存中的代码段中,此时a的值如果输出也应该为undefined,

所以我以为多次调用demo函数返回的应该都是那个预解析时创建的test才对,但是如上图,最后输出为false,

说明demo每执行一次,就会创建一个新的test,

然后我又执行了下面代码:

http://img1.sycdn.imooc.com//climg/5d426c710001a89308410580.jpg

输出:

http://img1.sycdn.imooc.com//climg/5d426c8700012f9605260118.jpg

我3次创建子函数test,3次变量a都被预解析了,但是我创建子函数明明是在代码执行阶段执行的,不是在预解析阶段,他是如何完成预解析的呢?

正在回答

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

3回答

你好,

1、即使是全局函数中的局部变量,也不是在预解析时就会被预解析的,而是在函数执行过程中才会连同子函数一起被预解析,这句话理解的没问题。

2、全局函数在预解析阶段,它的函数体会进入到内存的代码段存储起来。

祝学习愉快!

  • 楚楚提 提问者 #1
    如果是这样那就太好了,所有的思路都畅通了,感谢回复! 也就是预解析阶段只会将函数体代码放入内存的代码段,但是内部细节却并不知情,唯一确定的就是函数的首地址也就是函数引用是已知的了,可以随时调用了,具体细节会在调用时得到体现. 如果是这样,那么关于预解析那节课程能够详细一点就好了,因为我对预解析的误解和课程说得不够详细也有关呢
    2019-08-01 19:29:06
  • 好帮手慕星星 回复 提问者 楚楚提 #2
    老师非常理解同学的感受,这块的课程我也会进行反馈,综合大家的建议进行优化考量,如果对大家有帮助,我们也会采纳的!
    2019-08-01 20:13:23
好帮手慕星星 2019-08-01 14:52:32

同学你好,在预解析的地方理解的有问题:

1、全局中的预解析只会提升全局函数,不会预解析解析函数中的内容,当函数被调用的时候才会预解析函数中的内容。所以在demo没有调用之前预解析的时候test函数不会提升,a也不会被赋值为undefined。

2、每次调用demo方法都会预解析一遍函数中的内容,然后再执行代码,会创建不同的作用域,因为引用类型是不相等的。在不同的作用域中预解析的时候a变量提升为undefined,所以在赋值之前输出的结果都是undefined。

3、会在每个不同作用域中预解析,而不是在全局中预解析的哦,不会被覆盖。

祝学习愉快!

  • 提问者 楚楚提 #1
    就是说即使是全局函数中的局部变量,也不是在预解析时就会被预解析的,而是在函数执行过程中才会连同子函数一起被预解析??
    2019-08-01 17:53:52
  • 提问者 楚楚提 #2
    那么全局函数在预解析阶段,他的函数体会进入到内存的代码段吗
    2019-08-01 17:56:37
提问者 楚楚提 2019-08-01 12:41:08

补充提问:

如果demo每执行一次就创建一次test,那么预解析时创建的test岂不是被顶掉了??

问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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