为什么函数fn2中的username不能看做是定义了全局变量呢

为什么函数fn2中的username不能看做是定义了全局变量呢

函数fn2中在使用username这个变量的时候前面没有写var,为什么不是把这个username看做全局变量,而是说改变了fn1中定义的局部变量username的值?

有点没太明白,在变量前面不加var的情况下,什么时候是改变外层同名变量的值,什么时候是定义全局变量

正在回答

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

1回答

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

  1. 因为在fn函数内部使用var声明了变量username,所以函数内部的username是一个局部变量。

    由于fn2函数是在fn函数内部的声明的,此时在fn2中是使用username变量,而不是没有加var声明变量username,所以在fn2函数内部使用username变量时,向上查找到的是fn函数作用域的局部变量username。如下图所示:

    http://img1.sycdn.imooc.com//climg/5fc99491098eabfc04720813.jpg

  2. 在函数中使用var声明的变量属于局部变量,在函数中没有使用var声明的变量属于全局变量。

祝学习愉快~

  • 小fa花 提问者 #1

    谢谢老师,我明白了,意思就是说,因为fn2是嵌套在fn内部的,而fn中已经声明了username作为局部变量,所以对于fn2的username而言,就等同于其外面一层函数fn中的局部变量username,这样理解对吗?

    那还想问老师,如果fn中没有声明局部变量username的话(比如把fn代码中的“var username='xm';”这一行去掉),并且fn2的内容不变,那这个情况下fn2中的username是否就是使用的全局变量username呢?

    2020-12-05 15:00:59
  • 小fa花 提问者 #2

    不好意思,第二段括号里的代码写错了,应该是:去掉fn中“var username='xh';”这一行

    2020-12-05 15:02:59
  • 好帮手慕慕子 回复 提问者 小fa花 #3

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

    1、理解是对的。

    2、如果去掉var username='xh';这句代码,其他的代码不变,此时fn2中使用的就是全局中的username变量。

    祝学习愉快~

    2020-12-05 16:52:25
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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