Подготовка к собеседованию

Вопросы на собеседовании JavaScript с ответами

20 вопросов, которые чаще всего задают junior frontend-разработчику. Ответы — простым языком, без зазубривания формулировок из учебника.

❓ 20 вопросов 🎯 Уровень: junior 🔄 Обновлено: 2026

📘 Основы языка

1. В чём разница между var, let и const?
var имеет function scope и может «утекать» из блока, let и const — block scope, видны только внутри своего блока { }. let можно переназначить, const — нельзя. Сегодня var практически не используют.
2. В чём разница между == и ===?
== сравнивает значения с приведением типов ("5" == 5 → true), === сравнивает без приведения, включая тип ("5" === 5 → false). На практике почти всегда используют ===.
3. Чем отличается null от undefined?
undefined — значение по умолчанию, когда переменной ничего не присвоено. null — значение, которое разработчик ставит намеренно, чтобы явно сказать «здесь пусто».
4. Какие типы данных есть в JavaScript?
Примитивы: string, number, boolean, undefined, null, symbol, bigint. И один непримитивный тип — object (в том числе массивы и функции).
5. Что такое hoisting (всплытие)?
Механизм, при котором объявления переменных (var) и функций поднимаются в начало области видимости ещё до выполнения кода. let и const тоже поднимаются, но попадают в «temporal dead zone» — обратиться к ним до объявления нельзя.
6. Что такое замыкание (closure)?
Функция, которая «запоминает» переменные из внешней функции, даже после того как та уже завершила выполнение. Классический пример — функция-счётчик, которая хранит своё состояние между вызовами.

🗂️ Массивы и объекты

7. Чем map отличается от forEach?
forEach просто проходит по массиву и ничего не возвращает. map тоже проходит по массиву, но возвращает новый массив с результатом функции для каждого элемента.
8. Как проверить, является ли переменная массивом?
С помощью Array.isArray(value). Оператор typeof для массива вернёт "object", поэтому он для этого не подходит.
9. Как скопировать объект или массив?
Для поверхностной копии — spread-оператор: {...obj} или [...arr]. Для глубокой копии вложенных объектов часто используют structuredClone(obj) или JSON.parse(JSON.stringify(obj)).
10. Как удалить элемент из массива?
Через splice(index, 1) — изменяет исходный массив. Или через filter, если нужен новый массив без мутации исходного: arr.filter(item => item !== value).
11. Что делает метод reduce?
Сворачивает массив в одно значение, проходя по каждому элементу и накапливая результат. Часто используется для суммирования: arr.reduce((sum, n) => sum + n, 0).

🖥️ DOM и события

12. Как выбрать элемент на странице?
Чаще всего — document.querySelector(".class") для одного элемента и document.querySelectorAll(".class") для нескольких. Также есть getElementById.
13. В чём разница между addEventListener и onclick?
onclick позволяет назначить только один обработчик — новый заменит предыдущий. addEventListener позволяет добавить сколько угодно обработчиков на одно событие и гибче их убирать.
14. Что такое всплытие событий (event bubbling)?
Когда событие происходит на вложенном элементе, оно затем «поднимается» вверх по всем родительским элементам. Это позволяет использовать делегирование событий — вешать один обработчик на родителя вместо множества на детей.
15. Как остановить действие по умолчанию у события?
Вызвать event.preventDefault() внутри обработчика — например, чтобы форма не перезагружала страницу при отправке.

⏳ Асинхронность

16. Что такое Promise?
Объект, который представляет результат асинхронной операции — он может быть в одном из трёх состояний: pending (ожидание), fulfilled (успех) или rejected (ошибка).
17. Как работают async/await?
Это «синтаксический сахар» над промисами: функция помечается как async, а внутри неё await «ждёт» результат промиса, не блокируя остальной код страницы. Код выглядит и читается как синхронный.
18. Чем setTimeout отличается от setInterval?
setTimeout выполняет код один раз через заданную задержку. setInterval повторяет выполнение с указанным интервалом до тех пор, пока его не остановят через clearInterval.

💬 Общие вопросы

19. Что такое this в JavaScript?
Ссылка на объект, в контексте которого выполняется функция. Значение this зависит от того, как функция была вызвана. У стрелочных функций своего this нет — они берут его из окружающего кода.
20. Как ты обычно ищешь причину бага в коде?
Хороший ответ: читаю сообщение об ошибке в консоли, ставлю console.log в подозрительных местах или использую breakpoints в DevTools, сужаю проблему до конкретной строки, проверяю значения переменных на каждом шаге.

Что дальше

Готовишься к своему первому собеседованию?

В курсе JavaScript разбираются не только эти темы, но и реальные задачи — после него отвечать на такие вопросы станет естественно, а не по зубрёжке.