Что возвращает getName при обычном вызове, call и bind?

Результаты: Анна, undefined, Олег, Анна. Отделённая обычная функция не сохраняет объект автоматически; call задаёт this для вызова, bind создаёт привязанную функцию.

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

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

Результаты: Анна, undefined, Олег, Анна. Отделённая обычная функция не сохраняет объект автоматически; call задаёт this для вызова, bind создаёт привязанную функцию.

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

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

Условие

Определите результат JavaScript в строгом режиме:

'use strict';
const user = {name: 'Анна', getName() { return this?.name; }};
const f = user.getName;
console.log(user.getName());
console.log(f());
console.log(f.call({name: 'Олег'}));
console.log(f.bind(user)());

Ответ

Результаты: Анна, undefined, Олег, Анна. Отделённая обычная функция не сохраняет объект автоматически; call задаёт this для вызова, bind создаёт привязанную функцию.

У вызова user.getName() получатель — user. У f() в строгом режиме this равен undefined; optional chaining предотвращает TypeError и возвращает undefined. При call используется явно переданный объект. bind не вызывает исходную функцию сразу, а возвращает другую функцию с закреплённым контекстом, которую затем вызывают скобками.

Источник: developer.mozilla.org.

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

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

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

Подробнее