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

a();
function a(){
  console.log('Function a called');
}

Мы все знаем, что когда мы запускаем приведенный выше набор строк, он вызывает функцию и печатает

Вызывается функция

но почему вызывается эта функция, если она еще не объявлена ​​и не вызвана раньше. Должна выдавать ошибку "a не определено"

В JavaScript есть вещь, называемая глобальным контекстом выполнения, в котором есть 2 фазы:
1. Фаза памяти
Переменная и функция сохраняются в парах ключ-значение.

2. Фаза кода
, когда код выполняется построчно.

мы берем другой пример

console.log('a is', a);
var a = 10;

В глобальном контексте выполнения таблица создается с параметром a = undefined. После выполнения
a = 10 переменная a будет инициализирована значением 10.

Выход

а не определено

В этом мы добавили точку останова в наш код в первой строке еще до инициализации, она должна была вывести какую-то ошибку.

Но в приведенном ниже примере выдает ошибку, почему?

потому что, когда «a» инициализируется парой ключ-значение в глобальном контексте выполнения, значение a не определено, когда дело доходит до выполнения первой строки, оно говорит, что значение a не определено, это не функция.