user1290584
user1290584

Reputation: 21

jQuery and Twitter Bootstrap function explanation

If you see the twitter's bootstrap application.js file that exists in all documents, you will notice something the following code:

!function( $ ) {
    ...
}( window.jQuery );

Could someone explain why this is the case for the first line of the code?

thanks

Upvotes: 2

Views: 1664

Answers (3)

neuront
neuront

Reputation: 9622

That is because

function($) {} (window.jQuery);

is not valid in syntax, but

!function($) {} (window.jQuery);

is valid.

Now the question is why the first case is invalid?

Let's first take look at this. Both anonymous functions and named functions can be considered as a expression, e.g.

0 + function(y) { return y; } (1);
0 + function x(y) { return y; } (1);

are both valid.

Then consider this situation, this statement contain one expression

function x(y) {
    return y;
}
(1);

"That's incorrect!" may you say that because you know they are actually one function definition and one statement with one expression (1).

The truth is, those codes is ambiguous to a grammar parser, because it could be resolved as either one function and one parenthesis-wrapped expression, or a function invocation. To avoid this kind of ambiguous, Javascript rules that if function occurs as the first token of a statement, the statement ought to be a function definition. So function($) {} (window.jQuery); is not valid in syntax because it's not a valid function definition. But prepose a ! or even this kind code is valid

0 + function x(y) {
    return y;
}
(1);

It's one statement, with a binary plus, whose rhs is the function invocation, inside it.

Upvotes: 3

elclanrs
elclanrs

Reputation: 94101

It's a self executing function:

!function(x){}(y)

x is the parameter of the function and y is the parameter you pass in the auto-call of that function.

! is just a visual guide that tells you at a glance that the function is self executing. Another common practice is to wrap it in parenthesis instead. (function(){}())

Upvotes: 6

Taylor Dondich
Taylor Dondich

Reputation: 658

This guarantees that in the code inside the function you will be able to use the $ shorthand way of accessing jQuery. In some environments (Wordpress for example), they don't have the $ shorthand "enabled" to avoid conflict with other javascript libraries. By using this way here, you can use the simple $ construct in any environment (as long as window.jQuery is defined).

So, basically it creates a function and immediately calls it, passing in window.jQuery. That means code in the function will see the $ local variable, and it's been assigned window.jQuery.

Upvotes: 2

Related Questions