Результаты: Анна, undefined, Олег, Анна. Отделённая обычная функция не сохраняет объект автоматически; call задаёт this для вызова, bind создаёт привязанную функцию.
Что возвращает getName при обычном вызове, call и 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.