Что вернет эта функция?
(function() {
 let f = this ? class g { } : class h { };
 return [ typeof f, typeof h ];
 })();

Понимание функций в JavaScript

В данном вопросе рассмотрена функция JavaScript, которая возвращает массив с двумя элементами. Верным ответом на вопрос "Что вернет эта функция?" будет ["function", "undefined"] и вот почему.

(function() {
 let f = this ? class g { } : class h { };
 return [ typeof f, typeof h ];
})();

Функция определяет переменную f в зависимости от контекста this. Если this определено, то f является классом g, в противном случае — f становится классом h. Вне зависимости от этого, f всегда будет типа function, так как в JavaScript классы являются специальным типом функций.

Однако, typeof h всегда вернет undefined. Причина в том, что класс h определен только в области видимости второго выражения тернарного оператора. Как только это выражение завершается, класс h более не доступен и при попытке получить его тип мы получим undefined.

На практике, рекомендуется помнить о подобных особенностях области видимости в JavaScript. Локальные переменные и классы недоступны за пределами блока кода, в котором они определены. Это помогает предотвратить возможные ошибки и конфликты имен в больших кодовых базах. В то же время, использование this может быть сложным и запутанным, потому что его значение зависит от контекста, в котором его используют. Как и в случае с областью видимости, стоит быть внимательными при работе с this, чтобы избежать непредвиденных результатов.

Related Questions

Считаете ли это полезным?