Baza pytań rekrutacyjnych i wiedzy. Filtruj, szukaj i sprawdzaj swoją wiedzę.
var ma zasięg funkcji i można je redeklarować; let/const mają zasięg bloku. const blokuje ponowne przypisanie (ale obiekty nadal można mutować).
Deklaracje funkcji i var są hoistowane, ale inicjalizacje już nie. let/const też są hoistowane, ale do inicjalizacji są w tzw. temporal dead zone.
== wykonuje konwersję typów przed porównaniem, a === porównuje wartość i typ bez konwersji.
Closure to sytuacja, gdy funkcja wewnętrzna zachowuje dostęp do zmiennych z zewnętrznego zakresu. Typowe zastosowania to enkapsulacja danych i fabryki funkcji.
this zależy od miejsca wywołania. call/apply wywołują funkcję od razu z podanym this, a bind zwraca nową funkcję z na stałe ustawionym this.
Obiekty dziedziczą po innych obiektach przez łańcuch prototypów. Odczyt właściwości idzie w górę łańcucha aż do znalezienia lub null. Powiązania tworzy się np. przez Object.create lub składnię class.
Event loop obsługuje call stack i kolejki zadań. Microtaski (np. callbacki Promise) uruchamiają się przed kolejnym macrotaskiem (np. setTimeout).
Promise reprezentuje przyszłą wartość (pending/fulfilled/rejected) i pozwala na chaining przez then/catch. Callback to funkcja przekazana do wywołania później, często prowadząca do zagnieżdżeń.
async/await to składnia nad Promise pozwalająca pisać kod asynchroniczny w stylu synchronicznym. Błędy obsługujesz przez try/catch wokół await lub przez .catch().
Shallow copy kopiuje tylko poziom najwyższy i zachowuje referencje do zagnieżdżeń. Deep copy klonuje rekurencyjnie zagnieżdżone obiekty (np. structuredClone lub własny deep clone).
Debounce opóźnia wykonanie do momentu, gdy zdarzenia przestaną się pojawiać; throttle ogranicza liczbę wywołań do raz na interwał. Debounce do inputów, throttle do scroll/resize.
undefined oznacza, że zmienna została zadeklarowana, ale nie przypisana; null to jawna pusta wartość. typeof null historycznie zwraca "object".
Type coercion to automatyczna konwersja typów (np. 3 + 2 + "7" daje "57").
map przekształca każdy element, filter zachowuje elementy spełniające warunek, a reduce agreguje do jednej wartości.
Promise.all czeka aż wszystkie promisy się spełnią i odrzuca, gdy któryś się odrzuci. Używaj do równoległych zadań asynchronicznych i zbierania wyników.