'Difference between .call and .apply [duplicate]

Is there a simple way to passing all arguments from one function to another and sending this also.

I have tried this: http://jsfiddle.net/v92Xr/

var f1 = function() {
    f2.call(this, arguments);
};
var f2 = function() {
    console.log(arguments);
};
f1("abc", "def", "hij");

but it leaves me all the arguments from f1 is stacked in f2 arguments 0:

f2->arguments[0] == f1->arguments

Ok and when i run the apply method instead it works: http://jsfiddle.net/v92Xr/1/

var f1 = function() {
    f2.apply(this, arguments);
};
var f2 = function() {
    console.log(arguments);
};
f1("abc", "def", "hij");

So can anyone please tell me what's the difference between call and apply is?



Solution 1:[1]

I think you've just discovered the difference yourself.

call is almost identical to way you would normally call a function except there is an extra parameter at the start of the parameter list where you place the reference for the this object.

apply also has the first parameter as the this object but the second parameter is expected to be an array. This array is used to supply all the arguments that the called function is expecting. Element 0 maps to the first argument in the functions argument list, element 1 to the second and so on.

Solution 2:[2]

call MDN: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/call

Calls a function with a given this value and arguments provided individually.

fun.call(thisArg[, arg1[, arg2[, ...]]])

apply MDN: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/apply

Calls a function with a given this value and arguments provided as an array.

fun.apply(thisArg[, argsArray])

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 AnthonyWJones
Solution 2 Andrew D.