老师这里不太能明白

老师这里不太能明白

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

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

2回答
怒焰狂暴 2021-09-20 23:17:37

我给你解释解释吧,视频里老师讲解的确实比较绕,我解释的内容老师还没验证过,等节后你可以和老师确认下

(1)第一种:使用function abs()定义函数【你可以想象成是一个机器,这台机器的名字叫做abs,它的功能可以是各式各样的】,要启动这个机器呢,我们就必须调用这个函数【这里称作机器】,abs()【这时候就调用了】,所以只要这段代码里有这台机器的存在,只要找到相对应的机器名字,我们就能启动了

(2)第二种:使用var function = fun{}来定义,这就很好理解了, 如果这时候我们把fun()写在var function的前面,那么我们根本就找不到这台机器了,因为机器都还没生产出来,所以会报错。


你可以试试这么来理解下,我感觉比老师所说的预解析阶段好理解多了,我也是重复看视频,自己慢慢理解出来的。

好帮手慕慕子 2021-09-16 11:17:44

同学你好,具体参考如下解析:

1、先了解两个知识:

(1)预解析阶段,变量名和函数名同名的情况下,函数提升会覆盖变量声明提升。

(2)代码真正执行时,会跳过function A() {} 这种形式声明函数的语句。

2、截图中var声明的变量fun和function关键字声明的函数fun重名了,在预解析阶段,被提升到代码最前面的是function fun() { alert('B')}这个函数。

3、代码真正执行时,按着从上到下的顺序,具体过程如下:

(1)执行到第一个语句fun(),实际调用的是预解析阶段被提升到最前面的function fun() { alert('B')}这个函数,弹出B。

(2)接着往下执行到var fun = function () { alert('A')} 这句代码时,将fun赋值为一个函数function() {alert('A')}。

(3)然后跳过function fun() { alert('B')}这个声明函数的语句。

(4)最后执行fun()语句,此时的fun = function() {alert('A')},所以弹出结果为A。

​祝学习愉快~

  • 老师,为什么代码真正执行时,会跳过function A() {} 这种形式声明函数的语句。

    2022-02-27 16:14:40
  • 老师,好像明白一点了。是不是在预解析阶段函数定义已经完全解析了,所以执行时不会再解析,不会再覆盖。而函数表达式在预解析阶段只提升了变量,在后续的执行阶段还会继续执行变量的值(即函数)。还有老师,函数只解析一遍吗?

    2022-02-27 16:20:24
  • 同学你好,对于你的问题解答如下:

    1、是的,理解是对的

    2、是的,函数只解析一遍。

    祝学习愉快~

    2022-02-27 16:42:43
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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