Объясните почему код выводит 1 , а не 10?

Наткнулся на задачу и не могу найти более подробного ответа.

let a = 1;
function b() {
    a = 10;
    return;
    function a() {
        
    }
}
b();
console.log(a);

Почему консоль выводит 1. Ведь идет изменение значения внешней переменной внутри функции.


Ответы (1 шт):

Автор решения: Grundy

В данном случае внутри функции b описана функция a, которая, благодаря function declaration hoisting поднимается вверх.

Таким образом любое обращение к индентификатору a, внутри функции b, будет обращением к внутренней функции, а не глобальной переменной.

Проверить это можно, просто выведя значение a

let a = 1;

function b() {
  console.log(a);
  return;
  function a() { }
}
b();
console.log(a);

→ Ссылка