Результаты: Аня, Аня, Вера. Bind создаёт отдельную функцию с закреплённым this; последующий call не заменяет его, но исходная sayHi остаётся непривязанной.
Как bind фиксирует получателя функции sayHi?
Результаты: Аня, Аня, Вера. Bind создаёт отдельную функцию с закреплённым this; последующий call не заменяет его, но исходная sayHi остаётся непривязанной.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите вывод:
function sayHi() { return this.name; }
const hello = sayHi.bind({name:'Аня'});
console.log(hello());
console.log(hello.call({name:'Борис'}));
console.log(sayHi.call({name:'Вера'}));
Ответ
Результаты: Аня, Аня, Вера. Bind создаёт отдельную функцию с закреплённым this; последующий call не заменяет его, но исходная sayHi остаётся непривязанной.
Привязка не изменяет исходную функцию глобально и не записывает ей навсегда нового владельца. Поэтому sayHi.call с другим объектом работает независимо от hello. Возвращаемая bind функция может также фиксировать часть аргументов. В данном примере объекты не изменяются, но bind сохраняет ссылку на объект, а не снимок его полей.