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 в песочнице этого сайта не выполняется. Перенесите пример в отдельный учебный файл. Сначала проверьте исходный результат, затем измените входные данные; ошибка проверки означает, что результат отличается от ожидаемого.