Вопросы на собеседовании: JavaScript
Этот курс — подготовка к собеседованию по JavaScript в формате «вопрос — чёткий ответ — запускаемое доказательство». Каждый урок разбирает реальный вопрос, который задают на интервью: от типов и приведения до событийного цикла, замыканий и this. Ответы краткие и точные, а к каждому прилагается пример, который вы можете запустить прямо в браузере и убедиться в поведении сами. Особый упор сделан на три главные темы собеседований: Event Loop, замыкания и контекст this.
Курс «Вопросы на собеседовании: JavaScript» состоит из 6 разделов и 24 уроков: Типы и приведение, Область видимости и замыкания, this, контекст и прототипы, Асинхронность, Функции и работа с данными и Каверзы и практика. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.
Программа курса
1 Типы и приведение
- Какие типы данных есть в JavaScript? Примитивы и объекты
Разбор частого вопроса собеседования: сколько типов в JavaScript, чем примитивы отличаются от объектов и почему это важно при копировании.
- Чем == отличается от === ? Каверзные случаи приведения
Разбор различий == и === в JavaScript: как работает приведение типов при нестрогом сравнении и почему [] == ![] возвращает true.
- typeof, null vs undefined, NaN — что отвечать
Чем null отличается от undefined, почему typeof null === object и как правильно проверять NaN — частые вопросы на собеседовании по JavaScript.
- Truthy/falsy и сравнение объектов: почему {} !== {}
Какие значения в JavaScript ложные (falsy), как они ведут себя в условиях и почему два одинаковых на вид объекта не равны через ===.
- Какие типы данных есть в JavaScript? Примитивы и объекты
2 Область видимости и замыкания
- var, let и const — в чём разница? Block scope и TDZ
Различия var, let и const на собеседовании: область видимости, переназначение, временная мёртвая зона (TDZ) и почему const не делает объект неизменяемым.
- Что такое hoisting (поднятие)?
Hoisting в JavaScript простыми словами: как поднимаются объявления var и функций, чем function declaration отличается от function expression.
- Что такое замыкание (closure)? Объясните на примере
Замыкания в JavaScript простым языком: функция запоминает переменные окружения. Классические задачи — счётчик и приватные данные.
- Замыкание в цикле: классическая задача с var и let
Почему цикл с var и setTimeout печатает одно число, как это исправить через let или IIFE — разбор самой популярной задачи на замыкания.
- var, let и const — в чём разница? Block scope и TDZ
3 this, контекст и прототипы
- Как определяется this? Четыре правила
Главный вопрос про контекст в JavaScript: четыре правила определения this — обычный вызов, метод объекта, new и явная привязка call/apply/bind.
- call, apply и bind — в чём разница?
Как явно задать this через call, apply и bind: чем отличаются методы, как передавать аргументы и зачем нужно bind для коллбэков.
- Стрелочные функции и this: главное отличие
Почему стрелочные функции не имеют своего this и берут его из окружения — и как это спасает в коллбэках и методах.
- Прототипное наследование и классы: как устроена цепочка
Как работает прототипное наследование в JavaScript: __proto__, prototype, цепочка прототипов и почему class — это синтаксический сахар над прототипами.
- Как определяется this? Четыре правила
4 Асинхронность
- Событийный цикл (Event Loop): порядок выполнения
Как работает событийный цикл в JavaScript: call stack, микрозадачи и макрозадачи, почему Promise выполняется раньше setTimeout.
- От колбэков к промисам: then, catch, finally
Чем плохи колбэки и callback hell, как Promise решает проблему, состояния промиса и методы then/catch/finally на запускаемых примерах.
- async/await: синхронный вид асинхронного кода
Как async/await упрощает работу с промисами, как ловить ошибки через try/catch и в каком порядке выполняется код с await.
- Почему JS однопоточный, но неблокирующий? Promise.all и race
Как однопоточный JavaScript остаётся неблокирующим благодаря событийному циклу, и чем отличаются Promise.all, race, allSettled и any.
- Событийный цикл (Event Loop): порядок выполнения
5 Функции и работа с данными
- Функции высшего порядка и колбэки
Что такое функции высшего порядка в JavaScript: принимают или возвращают функции. Колбэки, замыкание аргументов и практические примеры.
- map, filter, reduce, find — методы массивов
Главные методы массивов JavaScript на собеседовании: map преобразует, filter отбирает, reduce сворачивает, find ищет — с запускаемыми примерами.
- Деструктуризация, spread и rest
Деструктуризация массивов и объектов, оператор spread для копирования и слияния, rest-параметры — частые вопросы и приёмы на собеседовании по JavaScript.
- Иммутабельность, каррирование и композиция
Что такое иммутабельность данных в JavaScript, зачем она нужна, и краткий разбор каррирования и композиции функций с примерами.
- Функции высшего порядка и колбэки
6 Каверзы и практика
- «Что выведет?» — разбор каверзных задач
Подборка задач «что выведет» с собеседований по JavaScript: hoisting, замыкание в цикле и порядок промисов — с пошаговым объяснением.
- Поверхностное и глубокое копирование объектов
Разница между поверхностным и глубоким копированием в JavaScript: почему spread копирует только верхний уровень и как сделать глубокую копию.
- Debounce и throttle: идея и реализация
Зачем нужны debounce и throttle, чем они отличаются и как их реализовать через замыкание и setTimeout — частая практическая задача на собеседовании.
- Мини-задачи и вопросы про производительность и память
Частые мини-задачи с собеседований (уникальные значения, переворот строки) и что отвечать про производительность, утечки памяти и сборщик мусора в JavaScript.
- «Что выведет?» — разбор каверзных задач