8 питань

Питання на співбесіді з JavaScript

Питання рівня Junior

  1. 1. Чим відрізняються var, let і const?

    Відповідь

    var має функціональну область видимості, а let і const блокову. Змінну var можна оголосити повторно, let і const у тій самій області ні. const не можна переприсвоїти, але вміст об'єкта чи масиву в ній змінювати можна. У сучасному коді за замовчуванням беруть const, а let лише коли значення змінюється.

    Додаткове питання: Що таке тимчасова мертва зона (TDZ)?

    Розбір теми в курсі: JavaScript Essentials

  2. 2. Що таке hoisting (підняття) у JavaScript?

    Відповідь

    Під час створення області видимості рушій реєструє оголошення до виконання коду. Оголошення функцій піднімаються повністю, тому їх можна викликати раніше за рядок оголошення. Змінна var піднімається зі значенням undefined. let і const теж реєструються, але до рядка оголошення перебувають у TDZ, і звернення до них кидає ReferenceError.

    Додаткове питання: Чи піднімається function expression, присвоєний у const?

    Розбір теми в курсі: JavaScript Essentials

  3. 3. У чому різниця між == і ===?

    Відповідь

    === порівнює без приведення типів: значення мають бути одного типу і рівні. == спершу приводить операнди до спільного типу, тому 0 == "" і null == undefined дають true. Через неочевидні правила приведення майже завжди використовують ===. Виняток, який іноді лишають навмисно: x == null перевіряє одразу null і undefined.

    Додаткове питання: Чому NaN === NaN дає false і як перевірити значення на NaN?

    Розбір теми в курсі: JavaScript Essentials

  4. 4. Що таке замикання (closure)? Наведіть приклад використання.

    Відповідь

    Замикання це функція разом із лексичним оточенням, у якому її створили. Вона має доступ до змінних зовнішньої функції навіть після того, як та завершилась. Так роблять приватний стан, наприклад лічильник, який повертає функцію increment. Також на замиканнях побудовані колбеки, фабрики функцій і мемоізація.

    Додаткове питання: Що виведе цикл for (var i = 0; i < 3; i++) setTimeout(() => console.log(i)) і як це виправити?

    Розбір теми в курсі: JavaScript Essentials

  5. 5. Чим поверхнева копія об'єкта відрізняється від глибокої?

    Відповідь

    Поверхнева копія створює новий об'єкт верхнього рівня, але вкладені об'єкти лишаються спільними посиланнями. Її роблять через spread { ...obj } або Object.assign. Глибока копія рекурсивно копіює всі рівні, тому зміни у вкладених даних не впливають на оригінал. Для неї є вбудований structuredClone, а JSON.parse(JSON.stringify(obj)) втрачає функції, undefined і дати.

    Додаткове питання: Що structuredClone не вміє копіювати?

    Розбір теми в курсі: JavaScript Essentials

Питання рівня Middle

  1. 1. Як працює event loop? Чим мікрозадачі відрізняються від макрозадач?

    Відповідь

    JavaScript виконує код в одному потоці через стек викликів, а асинхронні колбеки чекають у чергах. Після кожної макрозадачі (скрипт, setTimeout, подія) event loop повністю спорожнює чергу мікрозадач, лише потім бере наступну макрозадачу. Мікрозадачі це колбеки Promise.then, await і queueMicrotask. Тому Promise.resolve().then(...) спрацює раніше за setTimeout(..., 0).

    Додаткове питання: Що станеться, якщо мікрозадача постійно додає нову мікрозадачу?

    Розбір теми в курсі: JavaScript Essentials

  2. 2. Від чого залежить значення this у функції?

    Відповідь

    У звичайній функції this визначається способом виклику: для obj.method() це obj, для простого виклику undefined у strict mode або глобальний об'єкт без нього. call, apply і bind задають this явно, а new прив'язує його до нового об'єкта. Стрілкова функція власного this не має і бере його з зовнішньої області. Тому метод, переданий як колбек, часто втрачає контекст.

    Додаткове питання: Як зберегти this, коли передаєш метод класу в addEventListener?

    Розбір теми в курсі: JavaScript Essentials

  3. 3. Як співвідносяться проміси та async/await? Як обробляти помилки й паралельні запити?

    Відповідь

    async/await це синтаксис поверх промісів: async функція завжди повертає проміс, а await чекає його результату без вкладених then. Помилки ловлять через try/catch навколо await або .catch у ланцюжку. Послідовні await виконуються по черзі, тому незалежні запити запускають разом через Promise.all. Якщо потрібні результати навіть після помилок, беруть Promise.allSettled.

    Додаткове питання: Чим Promise.race відрізняється від Promise.any?

    Розбір теми в курсі: JavaScript Essentials

Тренуй ці питання

Вчи картки, відповідай текстом або голосом і отримуй оцінку AI. Потрібен вхід в акаунт.

Відповідай уголос і отримуй оцінку

Тут питання з еталонними відповідями. У застосунку ShortLesson ти відповідаєш сам, текстом або голосом, а AI оцінює відповідь за критеріями і ставить додаткове питання, як на справжній співбесіді.

Застосунок незабаром з'явиться в магазинах.

Інші теми