Первым появится 'Some Data'. В строгом режиме bar() затем выбросит TypeError; в нестрогом режиме выведет глобальное data, обычно undefined.
Что отобразит консоль в данном примере №4
Первым появится '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). Лексическая вложенность функции сама по себе не сохраняет объект-получатель.