Функция bind создаёт функцию, которая вызывает fn с заданным контекстом, опционально добавляя любые дополнительные предоставленные параметры в начало аргументов.
Она возвращает функцию, которая использует Function.prototype.apply(), чтобы применить данный ей context к fn, затем с помощью оператора распространения spred добавляет любые дополнительные предоставленные параметры к аргументам.
const bind = (fn, context, ...boundArgs) => (...args) =>
fn.apply(context, [...boundArgs, ...args]);
// Пример:
function greeting(greeting, punctuation) {
return `${greeting} ${this.userName}${punctuation}`;
}
const alex = { userName: "Alex" };
const alexBound = bind(greeting, alex);
console.log(alexBound("Hello", "!")); // 'Hello Alex!'