📘 Основы языка
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 разбираются не только эти темы, но и реальные задачи — после него отвечать на такие вопросы станет естественно, а не по зубрёжке.