Здравствуйте есть функция
function flexisum(a) {
var total = 0;
for(var i = 0; i < arguments.length; i++) {
var element = arguments[i];
if (!element) continue; // Игнорировать значения null и undefined
// Попытаться преобразовать аргумент в число n исходя из типа аргумента
var n;
switch(typeof element) {
case "number":
n = element;
// Преобразование не требуется
break;
case "object":
if (element instanceof Array) // Рекурсивный обход массива
n = flexisum.apply(this, element);
else n = element.valueOf( ); // Для других объектов вызвать valueOf
break;
case "function":
n = element( ); // Попытаться вызвать функцию
break;
case "string":
n = parseFloat(element); // Попытаться преобразовать строку
break;
case "boolean":
n = NaN; // Логические значения преобразовать невозможно
break;
}
// Если было получено нормально число – добавить его к сумме.
if (typeof n == "number" && !isNaN(n)) total += n;
// В противном случае сгенерировать исключение
else
throw new Error("sum(): ошибка преобразования " + element + " в число");
}
return total;
}
здесь есть момент где вызывается рекурсивный вызов функции и там же применяется метод apply n = flexisum.apply(this, element); я понимаю что здесь применяется фунция apply и она предназначена для масивов в отличии от call ей передается два оргумента один element определенный как массив а другой this тоесть текущий эллемент, только зачем он тут и как это все связать не пойму, только пожалуйста не отсылайте меня к мануалам, как работает это с одним аргументом я понял а как с двумя что то не доходит