当两个同名变量提升时会发生什么?

What happens when two variables hoisting with the same name?

所以如果我像这样声明两个变量:

var a = 5;
var b = 10;

Javascript 编译代码,在赋值发生之前这些变量是 undefined.

但如果我这样写:

var a = 5;
var a = 10;

当这些变量提升时会发生什么?它们都有名称 a 和 它们是 undefined?或者它可能是一个变量并且 undefined 在其中写入了两次?

提升在这里并不重要。在同一范围内不能有两个同名的变量。就像你写 var a 一样,只有 一个 变量 a,它的提升与你有一个 var a 没有什么不同。

此代码...

function() {
  var a = 5;
  var a = 10;
}

在功能上等同于此代码,a 提升:

function () {
  var a;
  a = 5;
  a = 10;
}