.apply(thisArg, argsArray) — аргументы массивом (или array-like).
functionadd(a, b) {
return a + b;
}
add.call(null, 1, 2); // 3
add.apply(null, [1, 2]); // 3
В современном коде чаще fn(...args) или bind. apply удобен, когда аргументы уже в массиве (legacy).
Итог
Одинаковый смысл вызова; call — отдельные аргументы, apply — массив. Для фиксации this без немедленного вызова — bind.
Исторически apply использовали, чтобы передать массив аргументов до появления spread. Сегодня fn.call(ctx, a, b) и fn(ctx && null, ...arr) покрывают большинство случаев. Помните: у стрелочных функций this не переопределяется через call/apply.
На собеседовании
Ожидают не заученную таблицу, а умение связать концепцию с багом из практики: что сломается, если выбрать неправильный вариант, и какой код вы напишете в реальном PR. Короткий пример и граничный случай обычно ценятся выше длинной теории.
Чем отличаются методы `.call` и `.apply` у функций? · Sobeso