Источник: https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Function/apply
Методapply()
 вызывает функцию с указанным значением this
 и аргументами, предоставленными в виде массива (либо массивоподобного объекта).
Примечание: хотя синтаксис этой функции практически полностью идентичен функции call(), фундаментальное различие между ними заключается в том, что функция call()
 принимает список аргументов, в то время, как функция apply()
 принимает простой массив с аргументами.
fun.apply(thisArg[, argsArray])
Параметры
this, предоставляемое для вызова функции fun. Обратите внимание, что this
  может не быть реальным значением, видимым этим методом: если метод является функцией в нестрогом режиме, значения null и undefined будут заменены глобальным объектом, а примитивные значения будут упакованы в объекты.Вы можете присваивать различные объекты this
 при вызове существующей функции. this
 ссылается на текущий объект, вызвавший объект. С помощью apply
 вы можете написать метод один раз, а затем наследовать его в других объектах, без необходимости переписывать метод для каждого нового объекта.
Метод apply
 очень похож на метод call(), за исключением поддерживаемого типа аргументов. Вы можете использовать массив аргументов вместо набора именованных параметров. Вместе с apply
 вы можете использовать литерал массива, например, fun.apply(this, ['есть', 'бананы']), либо объект Array, например, fun.apply(this, new Array('есть', 'бананы')).
Также вы можете использовать в качестве параметра argsArray
 псевдомассив arguments. arguments
 является локальной переменной функции. Он может использоваться для всех неопределённых аргументов вызываемого объекта. Таким образом, вы не обязаны знать, сколько и какие аргументы требует вызываемый объект при использовании метода apply. Вы можете использовать псевдомассив arguments
 для передачи всех аргументов в вызываемый объект. Вызываемый объект самостоятельно разберётся с обработкой аргументов.