В чём разница между методами call, apply и bind?
Уровень: Middle
Ответ
Все три метода позволяют вручную задать значение `this` при вызове функции. `func.call(thisArg, arg1, arg2, ...)` вызывает функцию `func` с указанным `thisArg` и переданными аргументами. `func.apply(thisArg, argsArray)` делает то же, но аргументы передаются в виде массива (или подобного ему объекта). Метод `bind` работает иначе: `func.bind(thisArg, arg1, arg2, ...)` возвращает новую функцию, у которой `this` навсегда привязан к `thisArg` (и, опционально, частично переданы аргументы по умолчанию). Эта привязанная функция может вызываться позже сколько угодно раз. В сумме: call и apply вызывают функцию сразу, а bind – привязывает контекст для последующих вызовов функции.