flexisum(1, 2, 3);
flexisum.call(this, 1, 2, 3);
flexisum.apply(this, [1, 2, 3]);
Все эти три варианта вызова, идентичны. apply этот вызов функции с аргументами, где аргументы перечислены в массиве, в отличии от простых вызовов, где каждый аргумент нужно перечислять.
например:
function test(a, b, c) {
alert("a: " + a + ", b: " + b + ", c: " + c);
}
test(1, 2, 3); // a: 1, b: 2, c: 3
test.call(this, 1, 2, 3); // a: 1, b: 2, c: 3
test.apply(this, [1, 2, 3]); // a: 1, b: 2, c: 3
Что же такое this? Это контекст в котором выполняется функция, просто вызывая функцию через call/apply контекст является обязательным аргументом, потому и отдается вызывающей функции, текущий контекст области в которой происходит вызов.