我想知道为什么输出是“1”。
var a
{
a = 1
function a() {}
a = 3
}
console.log(a) // 1Run Code Online (Sandbox Code Playgroud)
Vig*_*aut 12
这不是您应该在代码中执行的操作。将尝试分解正在发生的事情。
先决条件
在代码中添加一些标识符
// statement1
var a
{
// statement2
a = 1
// statement3
function a() {}
// statement4
a = 3
// statement5
console.log(a)
}
// statement6
console.log(a)Run Code Online (Sandbox Code Playgroud)
解释
初始变量表
| 多变的 | 范围 | 价值 |
|---|---|---|
statement1它将a在全局范围内声明一个变量
| 多变的 | 范围 | 价值 |
|---|---|---|
| A | 全球的 | 不明确的 |
statement2它将分配1给全局变量a
| 多变的 | 范围 | 价值 |
|---|---|---|
| A | 全球的 | 1 |
statement3a它声明了一个在块作用域中命名的函数
| 多变的 | 范围 | 价值 |
|---|---|---|
| A | 全球的 | 1 |
| A | 堵塞 | 功能 |
statement4它正在为其赋值3,a并且它将选择最接近的定义a来为其赋值。在这种情况下,它将分配3给块作用域a
| 多变的 | 范围 | 价值 |
|---|---|---|
| A | 全球的 | 1 |
| A | 堵塞 | 3 |
statement5它将记录最近的值a,在本例中是块作用域a的值3。
块完成后,它将
a从变量表中弹出,现在表将如下所示:
| 多变的 | 范围 | 价值 |
|---|---|---|
| A | 全球的 | 1 |
statement6它将记录最近的a,在本例中,它是全局变量,并且值仍然是 1
| 归档时间: |
|
| 查看次数: |
155 次 |
| 最近记录: |