任何人都可以解释我为什么会得到不同的输出?
代码1:
var a = 1;
function b() {
a = 10;
console.log(a); //output 10
}
b();
console.log(a); //output 10Run Code Online (Sandbox Code Playgroud)
代码2:
var a = 1;
function b() {
a = 10;
console.log(a); //output 10
function a() {}
}
b();
console.log(a); //output 1Run Code Online (Sandbox Code Playgroud)
为什么我在调用函数"b"后得到"a"变量的不同输出?需要一些明确的解释这里真正发生了什么?
我会说案例1是非常不言自明的,因为它的值a被覆盖了a=10.
在案例2中,由于function a() {}和因hoisting变量声明和函数定义移动到最接近的词汇范围,这是function b()对function a()这样a的作用范围function b()和改变其值不会影响全球的价值a,而是将function a()被覆盖.
因为全局值没有改变,所以console.log(a)当前外部function b()正在记录1.
| 归档时间: |
|
| 查看次数: |
94 次 |
| 最近记录: |