请老师解答

请老师解答

问题描述:

这道题函数会提升,且后一个函数会覆盖前一个。那变量是什么情况呢?请老师详说!

下载视频          

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

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

1回答
imooc_慕慕 2022-06-28 09:43:17

同学你好,预解析阶段,函数声明,变量声明都会提前,同名函数会覆盖同名变量;

变量提升,提升的是变量名var a,赋值留在原地,a=1;a=3; 还留在原地;解析参考如下图:

https://img1.sycdn.imooc.com//climg/62ba95850965c57009560487.jpg

同学可以试着再理解理解,如解答没有满足同学的需求,同学可以将问题再进一步描述;

祝学习愉快~

  • 提问者 慕工程0509258 #1

    为什么函数体a可以进行赋值操作呢?function a() {console.log(4)};是一个函数体,为什么可以通过a=1;赋值呢?它的var a;声明操作不是被覆盖了吗?如果要赋值不得重新声明吗?函数和变量到底啥关系呀,混在一起很晕呐

    2022-06-28 11:42:54
  • 提问者 慕工程0509258 #2
    1. 不是说函数提升优先吗?那么自上而下不是应该先提升完函数再提升变量吗?而解答中为什么一开头就先提升第一个变量呢?

      https://img1.sycdn.imooc.com//climg/62ba8013091c035306940389.jpg

    2. 按照老师的解答,提升完第一个变量和第一个函数后,不是应该提升第二个变量吗?为什么你的解答中先提升的第二个函数,最后才提升第二个变量呢?

    https://img1.sycdn.imooc.com//climg/62ba81360960ccb709800893.jpg

    2022-06-28 12:19:32
  • imooc_慕慕 回复 提问者 慕工程0509258 #3

    同学你好,是这样的,因为函数a,和var a 变量,其实是同时注册在window上的,而代码自上而下执行,所以会发生交替(即覆盖);而a =1;等同于window.a =1 等同于var a  =1;  

    a函数 等同于 window.a = function(){};

    所以函数a会被a的赋值所覆盖;

    函数和变量只是同名,并没有关系;

    祝学习愉快~

    2022-06-28 12:56:14
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星

相似问题

登录后可查看更多问答,登录/注册

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

在线咨询

领取优惠

免费试听

领取大纲

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