猿问

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

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

相关分类

JavaScript
我要回答