为了账号安全,请及时绑定邮箱和手机立即绑定

在JavaScript的立即执行的具名函数A内修改A的值时到底发生了什么?

在JavaScript的立即执行的具名函数A内修改A的值时到底发生了什么?

一只萌萌小番薯 2019-04-21 20:37:59
如下代码:(functionA(){console.log(A);//[FunctionA]A=1;console.log(window.A);//undefinedconsole.log(A);//[FunctionA]}())可以看到注释里的输出。这也就是说A=1这一步什么都没有发生。它既没有改变A的值,也没有在window中添加新的属性。而如下代码:(functionA(){console.log(A);//undefinedvarA=1;console.log(window.A);//undefinedconsole.log(A);//1}())这个还是很好理解的,var语句被hoist到函数顶端,函数内定义了变量A但是没有赋值,所以第一个log是undefined,因为有var,并没有向global添加属性,因此window.A也是undefined。接着,functionA(){console.log(A);//[FunctionA]A=1;console.log(window.A);//1console.log(A);//1}A();不在立即执行这个函数,结果也很符合直觉,打第一个log时,函数作用域内没有找到A,因此向上层查找,找到函数A;然后A=1使得window对象多了一个属性,第二个log结果是1,第三个log显然也是1。那么问题来了,第一段代码里,A=1到底做了什么呢?
查看完整描述

2 回答

  • 2 回答
  • 0 关注
  • 297 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信