正在回答 回答被采纳积分+1
我给你解释解释吧,视频里老师讲解的确实比较绕,我解释的内容老师还没验证过,等节后你可以和老师确认下
(1)第一种:使用function abs()定义函数【你可以想象成是一个机器,这台机器的名字叫做abs,它的功能可以是各式各样的】,要启动这个机器呢,我们就必须调用这个函数【这里称作机器】,abs()【这时候就调用了】,所以只要这段代码里有这台机器的存在,只要找到相对应的机器名字,我们就能启动了
(2)第二种:使用var function = fun{}来定义,这就很好理解了, 如果这时候我们把fun()写在var function的前面,那么我们根本就找不到这台机器了,因为机器都还没生产出来,所以会报错。
你可以试试这么来理解下,我感觉比老师所说的预解析阶段好理解多了,我也是重复看视频,自己慢慢理解出来的。
同学你好,具体参考如下解析:
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。
祝学习愉快~
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星