Це питання можна почути майже на кожному Frontend чи Backend інтервʼю рівня junior/middle.
Якщо дуже коротко, контекст виконання (Execution Context) - це середовище, де прямо зараз виконується наш код, простіше кажучи, значення this в момент виконання. Ми можемо мати 3 типи контексту виконання:
1. Глобальний контекст (Global Execution Context)
Цей контекст створюється один раз, коли завантажується файл і до нього належить весь код, який не всередині функцій: глобальні змінні, глобальні функції, this на верхньому рівні.
У браузері глобальний об’єкт зазвичай window.
2. Контекст виконання функції (Function Execution Context)
Тут важливо запамʼятати: кожен виклик функції - це новий контекст. Навіть якщо функція одна й та сама, контекст щоразу буде інший. У ньому JS зберігає: параметри функції, локальні змінні (ті, що всередині {}), this для конкретного виклику.
3. Контекст модуля (Module Execution Context)
Якщо код запускається як ES module, то він виконується в контексті модуля. Він схожий на глобальний, але є 2 важливі відмінності:
- Змінні не стають глобальними автоматично
thisна верхньому рівні будеundefined