При вызове до присваивания var-переменная равна undefined, поэтому попытка вызвать её как функцию приводит к TypeError.
Для фрагмента с вызовом функции до её присваивания переменной, например var foo = function () {}, определите результат выполнения и объясните hoisting.
При вызове до присваивания var-переменная равна undefined, поэтому попытка вызвать её как функцию приводит к TypeError.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
При вызове до присваивания var-переменная равна undefined, поэтому попытка вызвать её как функцию приводит к TypeError.
Пример: foo(); var foo = function () {};. Объявление var поднимается и инициализируется undefined, но присваивание функции происходит только в своей строке. У function declaration поведение другое: её можно вызвать раньше объявления в соответствующей области. Для let/const до инициализации действует temporal dead zone.