老师麻烦解答一下

老师麻烦解答一下

fun();
var fun=function(){
alert(‘A’);
}
//*************************
function fun(){
alert(‘B’);
}
//老师这里没太理解,其实明面上声明提升一个是变量,一个是函数,懂。但是当预解析输出函
数后,(执行阶段)下一步执行变量fun被函数A赋值,然后再下一步执行函数B为什么没有覆盖变量fun(函数A): 是因为函数B被预解析不再执行?还是一个是被赋值函数的(变量)一个是(函数)不是同一个体系从而跳过?
//*************************
fun();
那么最后这个输出的是变量fun(被赋值函数A),还是函数B

正在回答

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

1回答

同学你好,流程如下:

1、预解析提升fun变量并赋值为undefined,提升fun函数体,但是这两个名字一致,所以最终函数提升在前面。

2、从上到下按照顺序执行代码,调用fun(),那么执行的就是fun函数体,弹出‘B’

3、接着fun变量被赋值为函数A,下面是fun(B)函数体,而函数只有在调用的时候才会执行,所以这里会跳过。最终调用fun(),执行的也就是函数A,弹出‘A’。

自己再理解下,祝学习愉快!

  • 慕的地9440514 提问者 #1

    老师如果按照代码从上而下顺序执行那么函数B一定会覆盖上面的,我只能理解为函数的声明提升和变量类似但其实不同,其实是和CSS的提升权重一样会改变代码的执行顺序,例如:

    //*******注释掉不要这个fun()********

    function fun(){
    alert(‘B’);
    }

    var fun;

    //********************

    fun=function(){
    alert(‘A’);
    }

    //********************

    fun();

    可以这样理解吗

    2023-01-02 15:46:26
  • 好帮手慕星星 回复 提问者 慕的地9440514 #2

    这样理解也可以。记住变量名和函数名相同的时候,预解析函数一般会提升到最上面,知道执行流程即可。

    2023-01-02 18:36:26
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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