This question already has answers here:
Explain the encapsulated anonymous function syntax
(10 answers)
Closed 5 years ago.
Sorry about this being so vague, but I'm sure how else to ask this, simply because I don't know what it is. I've seen this once before, but I can't remember what it's doing or where to look for it.
What is this code doing with the outer parentheses and "window" thing?
(function(angular){
//some code
})(window.angular);
I really am sorry. After I get reference to some official documentation or something, I'll delete the post.
This is an example of IIFE (Immediately Invoked Function Expressions). Take a look at here for more explanation.
The first part
(function(angular){
//some code
})
is an anonymous function (it does not have a name). Since you want to execute it immediately (when the page/DOM is loaded), you just call it like any other function
(window.angular);
..with a parenthesis, arguments and a semicolon.
Your argument (window.angular) is just a global object (which is why it is defined on window scope).
In short, you are executing that body of function with an argument, which is defined globally.
Related
This question already has answers here:
Explain the encapsulated anonymous function syntax
(10 answers)
Closed 6 years ago.
Lets assume we have
function () {}.bind(null);
and
(function () {}).bind(null);
Why the first one doesn't work in developer console (it throws syntax error) but both of them work in code (".js" file in website).
I think its because you are trying to define an anonymous function. Console has no future way of referencing it so its a pointless endeavour, youre defining a function you have no way of calling. If you define it as a variable it works:
var a = function () {}.bind(null);
Also I dont think its binding related. Defining an anonymous function without binding and you have the same error
Edits
A statement that begins with the keyword "function" must be a valid
function declaration statement. That requires a name for the function.
In an expression (or expression statement), that rule is different; no
name is necessary because the function acts as a value in that
context. No name is required then.
via #Pointy from this answer
A function declaration cannot be anonymous, but a function expression
can. A stand alone anonymous function looks like a function
declaration that is missing an identifier to JavaScript. But, combined
with an operator, JavaScript treats an anonymous function as the
operator's operand expression.
via #gilly3 from this answer
This question already has answers here:
Reason behind this self invoking anonymous function variant
(5 answers)
Closed 8 years ago.
I just took a look at the underscore.js source code and when i strip the source code down to its bare containing IIFE it looks like this:
(function() {
}.call(this));
I always used the syntax with outer parantheses (function() {}).call(this); and wondered if this syntax is also valid and common?
If you're asking about the location of the outer ) specifically, then whether it's located immediately after the closing brace or after the entire expression doesn't matter for the most part. Either way doesn't make a difference to how the IIFE is executed.
The only difference here is the .call(this), which is invoked as a member of the function expression — a typical IIFE has just the inner parentheses immediately following the closing brace. The reason .call(this) is used is detailed in a number of other answers including this one.
This question already has answers here:
What is the (function() { } )() construct in JavaScript?
(28 answers)
Closed 8 years ago.
What does the following code mean in JavaScript :
(function() {
})();
It is a Self-Invoking Anonymous Function.
A self-invoking anonymous runs automatically/immediately when you create it and has no name, hence called anonymous.
More info
Thats a singleton/IIFE (immediately invoked function expression).
Using an IIFE can be helpful when wanting to use a local scope which eliminates binding to global objects like the window.
There is also a slight performance benefit to this approach as you can pass in commonly used objects to the anonymous function. JavaScript first looks for a property in its local scope then works up the chain.
This question already has answers here:
Immediate function invocation syntax
(3 answers)
Closed 9 years ago.
In order to use the $ symbol in jquery and not have to use jQuery.functionname, we use this
(function($) {
})(jQuery);
(In drupal, you actually have to specify this implicitly).
I don't understand this javascript syntax, why is there an initial parentheses? How is the (jQuery) at the end used?
It's just an anonymous function with an argument that's automatically invoked.
For example, if we were to expand it out a bit you'd end up with something like this:
var anon = function($) {
...
};
anon(jQuery);
The $ is a valid identifer in JavaScript and we pass in the existing jQuery object into the function for use through $, as it could be replaced later.
All that's doing is declaring an anonymous function and executing it immediately, passing in one argument (jQuery) into the function. That argument is given the name $ which can be used throughout the scope of the function.
The brackets around the function aren't strictly necessary in all contexts; see the comment under this answer for details. The gist is that they're needed here to make the function behave like an expression instead of a statement (function declaration).
This question already has answers here:
What does the exclamation mark do before the function?
(8 answers)
Closed 9 years ago.
I have been searching, but no clues... or I haven't search the proper way (so please excuse me if duplicate)
Does the following code, mean: If there is no jQuery defined, or no document ready?
!function ($) {
///
!function ($) {
$(function(){ // I know this is an alias to $(document).ready()
.....
}(window.jQuery) // Ending of !function
I'm asking, because I saw it here: http://twitter.github.io/bootstrap/assets/js/application.js and have no I really don't know what it means.
In this case, ! is being used because it's an operator, so the rest of the line will be treated as an expression rather than a statement. This is a way of writing an immediately invoked function expression. The more common idioms can be found here:
Javascript immediately invoked function patterns
! on a function(){}() simply flips (or negates) the value that's returned after immediately calling the function that's defined. Notice that immediately after the function definition, at the very last line, it says (window.jQuery) — that's passing jQuery as the argument to the function and calling it immediately.
But in this case it doesn't appear to do anything important since the return value won't be used anyway. The function will still be executed though.
Also, it says this at the top of the file:
// NOTICE!! DO NOT USE ANY OF THIS JAVASCRIPT
// IT'S ALL JUST JUNK FOR OUR DOCS!
// ++++++++++++++++++++++++++++++++++++++++++
So that's evidence further that it's not meant to serve any real purpose.