Как JS объявляет переменные и функции без лексической области видимости в блоке операторов? - PullRequest
5 голосов
/ 29 сентября 2019

var a; 
{
  function a() {}
  a = 60;
  console.log('1: ', a);
}
console.log('2: ', a);

var b; 
{
  b = 60;

  function b() {}
  console.log('3: ', b);
}
console.log('4: ', b);

Вывод:

1: 60
2: f a() {}
3: 60
4: 60

Я не могу понять, почему, если я удаляю фигурные скобки, все это печатает 60.Возможно из-за подъема.Но, насколько я знаю, объявление функции не имеет лексической области видимости, и даже если это так, первый вывод должен напечатать функцию, верно?

...