Damn Matt, you should do a wiki page with that content.
Great explanation.
Rey...
Matt Kruse wrote:
On May 5, 3:38 pm, kiusau <kiu...@mac.com> wrote:
QUESTION: If a lone pair of parentheses can be used to automatically
call a function, then what does it mean when two pairs are juxtaposed
in the same statement as follows: ()(jQuery);?
See, this is purely a javascript language question, unrelated to
jQuery specifically.
In js, () around something simply returns what is inside of it. So, (x)
===x.
Then,
(function() { })
simply returns the anonymous function object. And how do you call a
function? You put () after it.
(function() { })();
just defines an anonymous function and then immediately calls it. And
this:
(function() { })(value);
calls the function with a parameter. But in the above example, the
function being called doesn't actually do anything with passed
parameters, so we can do this:
(function(a) { })(value);
This passes "value" to the function, which accepts as a parameter
named "a". Now, let's change the values to:
(function($) { })(jQuery);
This just defines an anonymous function with parameter $ (a valid
identifier), and calls it by passing in the global jQuery object. Now,
inside the anonymous function, we can refer to the global jQuery
object using $, which is a convention:
(function($) { alert($); })(jQuery);
Now let's get to:
BACKGROUND: I have recently learned that any named or anonymous
JavaScript function can be made into a named jQuery method according
to the following reassignment
(function($) {$.fn.METHOD_NAME = function() {FUNCTION_CODE}})(jQuery);
This passes the jQuery object to the internal anonymous function, then
operates on $.
It adds a property to the $.fn object, which in jQuery is the
prototype for the jQuery object.
So $.fn.METHOD will be available as $().METHOD() because $() creates a
jQuery object, and METHOD is in its prototype object.
Hope that helps,
Matt Kruse