请老师解答

请老师解答

问题描述:

为什么这里会有变量提升?不是会报错吗?

相关截图:

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

下载视频          

下载视频          

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

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

1回答
好帮手慕慕子 2022-06-27 17:18:22

同学你好,问题解答如下:

1、预解析阶段,代码从上到下执行,遇到var关键字,就会将声明的变量提升,所以会存在变量提升。但是当变量名和函数名同名时,优先提升函数,所以预解析后,提升到代码最前的是function关键字声明的函数,如下:

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

2、代码不会报错,具可以参考如下解析理解,代码按着从上到下的顺序执行:

(1)执行fun() 时,调用预解析后优先提升的函数function () { alert('B')},所以弹出结果为B。

(2)执行var fun =function () { alert('A')}  代码,function () { alert('A')} 赋值给变量fun。

(3)代码真正执行阶段,会跳过function关键字的函数声明语句。

(4)fun() 执行时,由(2)可知此时的fun指向function () { alert('A')} ,所以弹出结果为A。

祝学习愉快~

  • 提问者 慕工程0509258 #1

    可之前不是讲过先使用变量再定义变量才有变量提升吗?

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

    开头只有一个fun(),可以用来提升function () { alert('B')},而var fun =function () { alert('A')}是一个按顺序正常定义的变量,前面也没有使用先它,又何来提升的说法呢?我明白函数优先提升的道理,老师不必多说此点,主要是弄不懂这个哪来的变量提升,请老师解惑



    下载视频          
    2022-06-27 17:33:16
  • 好帮手慕慕子 回复 提问者 慕工程0509258 #2

    同学你好,对于前面讲解的内容理解有误,截图中的意思是可以利用变量声明的提升的特性,提前使用一个稍后才声明的变量,而不是说先使用变量再定义才有变量提升。

    var声明变量后,不管是否提前使用,预解析时都存在变量提升。

    祝学习愉快~

    2022-06-27 17:37:36
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星

相似问题

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

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

在线咨询

领取优惠

免费试听

领取大纲

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