Есть код с самовызывающейся функцией (IIFE) с использованием var. Что будет выведено в консоли при вызове typeof a и typeof b снаружи функции? Как поведение изменится в строгом режиме?

Если внутри IIFE объявлены переменные с помощью var, например:

Короткий ответ

Что ответить на собеседовании

Если внутри IIFE объявлены переменные с помощью var, например:

Подробный разбор

Ответ с пояснениями

Если внутри IIFE объявлены переменные с помощью var, например:

(function() {
  var a = 10;
  b = 20; // без var
})();

console.log(typeof a); // "undefined"
console.log(typeof b); // "number"

Переменная a объявлена с var внутри функции, она локальна и недоступна снаружи, поэтому typeof a вернёт "undefined".

Переменная b объявлена без var, let или const, что в нестрогом режиме приводит к созданию глобальной переменной. Поэтому typeof b вернёт "number".

В строгом режиме ('use strict';) попытка присвоить значение необъявленной переменной (b = 20;) вызовет ошибку ReferenceError, и глобальная переменная не будет создана. Таким образом, вне функции обе переменные будут недоступны, и typeof a и typeof b вернут "undefined" (или ошибка будет выброшена до этого).

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее