c.a() выведет объект c. c.b() вызовет a() без объекта слева от точки, поэтому второй вывод — undefined в strict mode или глобальный объект в нестрогом режиме.
Что отобразит console.log в примере №76
c.a() выведет объект c. c.b() вызовет a() без объекта слева от точки, поэтому второй вывод — undefined в strict mode или глобальный объект в нестрогом режиме.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Укажите, какой результат будет напечатан в консоль при выполнении следующего кода:
function a () {
console.log(this);
}
function b () {
a();
}
const c = {
a,
b,
}
c.a();
c.b();
Ответ
c.a() выведет объект c. c.b() вызовет a() без объекта слева от точки, поэтому второй вывод — undefined в strict mode или глобальный объект в нестрогом режиме.
Хотя b вызвана как метод c, её this не передаётся автоматически вложенному обычному вызову a(). Значение this определяется отдельно для каждого вызова функции.
Чтобы второй вызов тоже вывел c, внутри b можно написать a.call(this). Альтернатива — this.a(), если объект гарантированно содержит нужный метод. Это отличается от стрелочной функции, которая собственного this не имеет и берёт его из внешнего окружения.