← Wszystkie tematy

Pytania rekrutacyjne JavaScript z odpowiedziami

Czysty JS: typy, domknięcia, this, prototypy, asynchroniczność i event loop, DOM i API przeglądarki.

225 pytań na rozmowę rekrutacyjną z tematu JavaScript z odpowiedziami i wyjaśnieniami - poziomy Junior, Middle i Senior. Przykładowe pytania, testy online i zadania z kodu.

Pytania według poziomu

Przykładowe pytania

Kilka pytań z każdego poziomu z poprawną odpowiedzią i wyjaśnieniem.

JavaScript · Junior

  1. Ile typów danych ma JavaScript według specyfikacji?

    Poprawna odpowiedź: 8: siedem prymitywów i object

    Prymitywy: number, bigint, string, boolean, null, undefined, symbol. Wszystko inne to object, w tym tablice, funkcje i daty. Funkcje są obiektami, choć typeof zwraca dla nich 'function'.

  2. Co zwraca typeof null?

    Poprawna odpowiedź: 'object'

    To historyczny błąd z pierwszej implementacji języka, zachowany dla kompatybilności. null to osobny prymityw. Sprawdza się go ścisłą równością: value === null.

  3. Co zwraca typeof NaN?

    Poprawna odpowiedź: 'number'

    NaN (Not-a-Number) to specjalna wartość typu liczbowego, wynik niepoprawnej operacji matematycznej, np. 0 / 0 lub Number('abc'). Sprawdza się go przez Number.isNaN(x).

  4. Czym let różni się od var?

    Poprawna odpowiedź: let ma zasięg bloku {}, var - funkcji

    var zadeklarowany wewnątrz if lub for jest widoczny w całej funkcji. Ponadto var jest hoistowany z wartością undefined i na najwyższym poziomie staje się właściwością window, a let i const do momentu deklaracji są w „martwej strefie czasowej”.

Wszystkie 75 pytań z odpowiedziami →

JavaScript · Middle

  1. Czym różnią się od siebie call, apply i bind?

    Poprawna odpowiedź: call/apply wywołują od razu, bind zwraca nową funkcję

    fn.call(ctx, a, b) i fn.apply(ctx, [a, b]) wywołują od razu z podanym this. fn.bind(ctx, a) zwraca funkcję z na stałe przypiętym kontekstem i częściowo zastosowanymi argumentami. Żadna z nich nie wpływa na funkcje strzałkowe: nie mają one własnego this.

  2. Jak silnik szuka właściwości, której sam obiekt nie ma?

    Poprawna odpowiedź: Idzie w górę łańcucha prototypów, aż znajdzie właściwość lub dojdzie do null

    Każdy obiekt ma ukryty link [[Prototype]] (Object.getPrototypeOf). Tak tablice dostają map z Array.prototype, a wszystkie obiekty toString z Object.prototype. Przeszukiwanie zakresów dotyczy zmiennych, a nie właściwości.

  3. Co robi Object.create(proto)?

    Poprawna odpowiedź: Tworzy nowy pusty obiekt, którego prototypem jest proto

    Właściwości proto nie są kopiowane - są dostępne przez łańcuch prototypów. Object.create(null) tworzy obiekt w ogóle bez prototypu: wygodny „czysty” słownik bez dziedziczonych kluczy typu toString.

  4. Czym naprawdę są klasy w JavaScript?

    Poprawna odpowiedź: Składnią na dziedziczeniu prototypowym z kilkoma dodatkowymi sprawdzeniami

    Metody klasy trafiają do Class.prototype, a extends buduje łańcuch prototypów. Są jednak różnice wobec funkcji-konstruktorów: klasy nie można wywołać bez new, jej ciało działa w trybie ścisłym, metody są niewyliczalne, są prywatne pola #x i static.

Wszystkie 75 pytań z odpowiedziami →

JavaScript · Senior

  1. Jak event loop przetwarza zadania w przeglądarce?

    Poprawna odpowiedź: Jedno makrozadanie, potem cała kolejka mikrozadań, potem ewentualne renderowanie

    Po każdym makrozadaniu (skrypt, zdarzenie, timer) kolejka mikrozadań jest opróżniana do końca, łącznie z mikrozadaniami dodanymi po drodze. Potem przeglądarka może zaktualizować renderowanie (wywołując requestAnimationFrame), jeśli przyszła pora na klatkę. Dlatego długi łańcuch mikrozadań również blokuje renderowanie.

  2. Jak globalnie śledzić nieobsłużone odrzucenia promise'ów w przeglądarce?

    Poprawna odpowiedź: Zdarzeniem unhandledrejection na window

    window.addEventListener('unhandledrejection', e => report(e.reason)) to standardowy sposób wysyłania takich błędów do monitoringu. Synchroniczne nieobsłużone błędy łapie zdarzenie error na window. Metody Promise.onError nie ma.

  3. Co robi for await...of?

    Poprawna odpowiedź: Iteruje po asynchronicznym obiekcie iterowalnym, czekając na każdą wartość

    Działa z obiektami, które mają Symbol.asyncIterator: generatorami async, strumieniami (ReadableStream), paginacją API. Iteracje wykonują się sekwencyjnie. Do równoległego przetwarzania tablicy promise'ów użyj Promise.all.

  4. Do czego służy Proxy?

    Poprawna odpowiedź: Do przechwytywania operacji na obiekcie: odczytów, zapisów, usunięć

    Pułapki (traps) takie jak get, set, has i deleteProperty pozwalają implementować reaktywność (tak działa Vue 3), walidację, logowanie i wartości domyślne. Reflect daje domyślne zachowanie operacji do użycia wewnątrz pułapek.

Wszystkie 75 pytań z odpowiedziami →

Testy łączone z tym tematem

Pytania z kilku tematów naraz - jak na rozmowie rekrutacyjnej na konkretne stanowisko.

Zadania z kodu

Napisz rozwiązanie prosto w przeglądarce, a testy od razu je sprawdzą. Klasyka rozmów rekrutacyjnych: debounce, throttle, deepClone, Promise.all, EventEmitter, cache LRU i inne.

Otwórz zadania →