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

call и apply: явный контекст разового вызова

Методы call и apply вызывают функцию сразу, передавая заданный this и аргументы.

Назначение

Методы call и apply вызывают функцию сразу, передавая заданный this и аргументы.

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

call принимает аргументы по отдельности, apply — в массивоподобном наборе. В отличие от bind они не создают отложенный привязанный callback. Для стрелок собственный контекст таким способом не назначается.

Пример

function total(a,b){return this.base+a+b;}
const context={base:10};
console.assert(total.call(context,2,3)===15);
console.assert(total.apply(context,[2,3])===15);

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

Оба вызова дают 15 и сразу завершают вычисление. Различается только способ передачи дополнительных аргументов, а не правило сложения или объект контекста.

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

Не передавайте огромный массив через apply без оценки ограничения количества аргументов. Для обработки больших коллекций лучше выбрать последовательный алгоритм.

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

Вызовите одну функцию обоими способами и сравните результат. Затем напишите обычную обёртку для того же вызова и решите, какая форма понятнее в конкретном коде.

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

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