Что отобразит консоль в данном примере №4

Первым появится 'Some Data'. В строгом режиме bar() затем выбросит TypeError; в нестрогом режиме выведет глобальное data, обычно undefined.

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

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

Первым появится 'Some Data'. В строгом режиме bar() затем выбросит TypeError; в нестрогом режиме выведет глобальное data, обычно undefined.

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

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

Условие

Определите, какой вывод появится в консоли при выполнении следующего кода JavaScript:

var object = {
  data: 'Some Data',
  foo: function foo() {
    console.log(this.data);

    function bar() {
      console.log(this.data);
    }

    bar();
  }
};

object.foo();

Ответ

Первым появится 'Some Data'. В строгом режиме bar() затем выбросит TypeError; в нестрогом режиме выведет глобальное data, обычно undefined.

object.foo() получает this === object, но вложенная обычная функция bar вызывается самостоятельно и не наследует this внешней функции. Режим выполнения важен: ES-модуль строгий, обычный script без директивы может быть нестрогим. Для повторного вывода Some Data замените bar на стрелку либо вызовите bar.call(this). Лексическая вложенность функции сама по себе не сохраняет объект-получатель.

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

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

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

Подробнее