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