老师请问一下测试组卷里面的第14题,解析有点看不懂,能否详细解释一下

老师请问一下测试组卷里面的第14题,解析有点看不懂,能否详细解释一下

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

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

1回答
好帮手慕慕子 2022-04-07 09:57:42

同学你好,测试组卷中的14题如下:

https://img1.sycdn.imooc.com//climg/624e41c909591f3c11960602.jpg

与同学粘贴的图片不符,老师针对同学粘贴代码截图讲解,如下:

1、执行var username = "小星星" 这句代码时,声明一个全局变量,名为username,跳过函数声明,接着执行后面的代码

2、执行func()这句代码,调用函数func,执行该函数内部的代码

3、由于func函数内部已经使用var关键字声明了变量username,所以在声明前访问该变量,值为undefined,如下:

https://img1.sycdn.imooc.com//climg/624e42f209d0cccd03800350.jpg

4、 funcname(username) 调用funcname函数,函数内部的username="小慕"是针对 var username = "小鱼" 这句代码声明的变量username,重新赋值。所以接着执行console.log(username)结果为小慕如下:

https://img1.sycdn.imooc.com//climg/624e442309ea7de903690371.jpg

5、接着执行func()后面的代码console.log(username),访问的是全局变量username,值为小星星。


本题重点是要区分开全局变量和局部变量,函数内部使用var声明了变量,不管是否与全局变量同名,函数内部对该变量的操作都是针对局部变量,并不会影响到全局变量的值。所以最终输出结果为:undefined,小慕、小星星

祝学习愉快~

  • 提问者 东部鼠民 #1

    老师,我对第一个是undefined还是有疑问,函数不是有预解析的吗?而且就算没有的话 第一行定义的全局变量为什么不能在局部函数中应用呢?

    2022-04-07 11:08:59
  • 好帮手慕慕子 回复 提问者 东部鼠民 #2

    问题解答如下:

    1、函数有预解析,这个预解析是针对整个函数,而不是针对函数体内部的代码

    2、可以理解为是函数的特性,当函数内部声明了与全局变量同名的局部变量,函数内部就不会再去访问全局变量了。因为函数内部使用了var声明了局部变量username,所以不会再去访问全局变量username

    祝学习愉快~

    2022-04-07 11:19:57
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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