Вебсправочник
Справочник JavaScript

Function.bind(): сохранение контекста и части аргументов

Метод bind возвращает новую функцию с закреплённым this и, при необходимости, начальными аргументами.

Назначение

Метод bind возвращает новую функцию с закреплённым this и, при необходимости, начальными аргументами.

Как это работает

Вызов bind не запускает исходную функцию сразу. Новая функция имеет собственную идентичность, что важно для регистрации и удаления обработчиков событий. Стрелочная функция не получает новый this через bind.

Пример

function title(prefix,suffix){return prefix+this.name+suffix;}
const reader={name:'Анна'};
const greet=title.bind(reader,'Привет, ');
console.assert(greet('!')==='Привет, Анна!');
console.assert(title.bind(reader)!==title.bind(reader));

Что должно получиться

Приветствие использует закреплённое имя и префикс. Два вызова bind создают разные функции, даже если исходная функция и объект совпадают.

Граница применения и частая ошибка

Не вызывайте bind повторно при removeEventListener, ожидая ту же функцию. Сохраните полученный callback в переменную, иначе удаляемая ссылка будет отличаться от добавленной.

Самостоятельная проверка

Закрепите контекст и первый аргумент, затем вызовите результат с оставшимся аргументом. Сравните две отдельно созданные привязанные функции по строгому равенству.

JavaScript в песочнице этого сайта не выполняется. Перенесите пример в отдельный учебный файл. Сначала проверьте исходный результат, затем измените входные данные; ошибка проверки означает, что результат отличается от ожидаемого.

Самостоятельный учебный материал. Техническая документация: первоисточник по теме ↗. Если результат отличается, проверьте код и версию браузера.