Непрямой вызов выполняется, когда функция вызывается с использованием методов myFun.call() или myFun.apply().

Функции в JavaScript - это объекты первого класса, что означает, что функция - это объект. Тип такого объекта - Function.

Из списка методов, которые есть у объекта функции, .call() и .apply() используются для вызова функции с настраиваемым контекстом.

myFunction.call(thisArg, arg1, arg2, ...) принимает первый аргумент thisArg как контекст вызова и список аргументов arg1, args2, ..., которые передаются как аргументы вызываемой функции.

myFunction.apply(thisArg, [arg1, arg2, ...]) принимает первый аргумент thisArg в качестве контекста вызова и массив аргументов [arg1, args, ...], которые передаются в качестве аргументов вызываемой функции. .

В следующем примере демонстрируется непрямой вызов:

function sum(num1, num2) {
  return num1 + num2;
}
sum.call(undefined, 10, 2);  // => 12
sum.apply(undefined, [10, 2]);  // => 12

sum.call() и sum.apply() вызывают функцию с аргументами 10 и 2.