输出结果为1,请问这是什么原因

Agi*_*ty6 6 javascript

我想知道为什么输出是“1”。

var a
{
  a = 1
  function a() {}
  a = 3
}
console.log(a) // 1
Run 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
执行statement3

a它声明了一个在块作用域中命名的函数

多变的 范围 价值
A 全球的 1
A 堵塞 功能
执行statement4

它正在为其赋值3a并且它将选择最接近的定义a来为其赋值。在这种情况下,它将分配3给块作用域a

多变的 范围 价值
A 全球的 1
A 堵塞 3
执行statement5

它将记录最近的值a,在本例中是块作用域a的值3

块完成后,它将a从变量表中弹出,现在表将如下所示:

多变的 范围 价值
A 全球的 1
执行statement6

它将记录最近的a,在本例中,它是全局变量,并且值仍然是 1