call and apply are verbose ways to all a function. f.call is useful as a replacement for f() because it lets you set the this that f sees. f.apply is useful because it takes an array of argument values, so that you don't need to write them all out if you don't know how many there are.

Results

function f() { logArguments(this, arguments); }
// these are equivalent: f(1, 2, 3); f.call(window, 1, 2, 3); f.apply(window, [1, 2, 3]);