Hoisting, один из самых часто задаваемых вопросах на собесах
Постараюсь объяснить как можно проще.
И так что это:
Hoisting - означает, что объявления переменных и функций перемещаются вверх их области видимости перед выполнением кода.
Например:console.log(dog); // undefinedvar dog = “Bobik”;1. Мы объявляем переменную dog и присвоили ей значение “Bobik” сразу после того, как попытались вывести ее в консоле. Результат - undefined.
Почему undefinedа не ошибка в консоли?👉 При инициализации переменная перемещается вверх, но значение еще не присвоено и поэтому движок автоматически присваивает undefined
👉 Выполняется console.log(dog)
👉 Присваивается значение переменной
Это можно было бы написать примерно так:var dog = undefined;console.log(dog); // undefineddog = “Bobik”;C letи constесть нюансы
Объявленные переменные с помощью ключевого слова let или const, поднимается так же, как и в случае с var, но они не инициализируются движком javascript с помощью undefined и выдадут ошибку ReferenceError.
Функции:
Точно так же, как и с переменными, объявление функции с помощью function declaration поднимается на этапе создания глобального контекста, а вот при использовании function expression - вы получите сообщение об ошибке.