I was just digging through some JavaScript code (Raphaël.js) and came across the following line (translated slightly):
Math.min.apply(0, x)
The reason is this:
Your input x is an array
The signature of Math.min() doesn't take arrays, only comma separated arguments
If you were using Function.prototype.call() it would have almost the same signature, except the first argument is the this context, i.e. who's "calling"
Math.min.call(context, num1, num2, num3)The context only matters when you refer to this inside the function, e.g. most methods you can call on an array: Array.prototype. would refer to this (the array to the left of the 'dot') inside the method.
Function.prototype.apply() is very similar to .call(), only that instead of taking comma-separated arguments, it now takes an array after the context.
Function.prototype.call(context, arg1, arg2, arg3)Function.prototype.apply(context, [arg1, arg2, arg3]) The 0 or null that you put in as the first argument is just a place shifter.