http://yehudakatz.com/2011/08/11/understanding-javascript-function-invocation-and-this/
/*******************
The short version is: a function invocation like fn(...args)
is the same as fn.call(window [ES5-strict: undefined], ...args)
.
Note that this is also true about functions declared inline: (function() {})()
is the same as (function() {}).call(window [ES5-strict: undefined)
.
**********************/
Because jQuery makes such heavy use of anonymous callback functions, it uses the call
method internally to set the this
value of those callbacks to a more useful value. For instance, instead of receiving window
as this
in all event handlers (as you would without special intervention), jQuery invokes call
on the callback with the element that set up the event handler as its first parameter.
This is extremely useful, because the default value of this
in anonymous callbacks is not particularly useful, but it can give beginners to JavaScript the impression that this
is, in general a strange, often mutated concept that is hard to reason about.
If you understand the basic rules for converting a sugary function call into a desugared func.call(thisValue, ...args)
, you should be able to navigate the not so treacherous waters of the JavaScript this
value.