Awkward way of executing JavaScript code
JavascriptJavascript Problem Overview
In the Google tutorial for implementing Google+ sign-in in Flask application, I discovered that the developer often uses an awkward way of executing JavaScript code:
Instead of doing
var a = foo(bar);
I see this:
var a = (function() {
return foo(bar);
})();
What is the reason to do it the weird way?
Javascript Solutions
Solution 1 - Javascript
This is a poor example. Consider the following:
var a = (function(){
var ret = {};
ret.test = "123";
function imPrivate() { /* ... */ }
ret.public = function() { imPrivate(); }
return ret;
})();
a
will contain the varible test and the function public, however you can not access imPrivate. This is the common way to handle public vs private variables;
See https://stackoverflow.com/questions/5815757/what-exactly-is-the-point-of-this-function-construct-why-is-it-needed for more info.
Solution 2 - Javascript
var a = (function() {
return foo(bar);
})();
In this case this is really unnecessary, but this is not wrong and it will not throw an error.
But IIF
some times uses like module pattern
:
var a = (function() {
/* some other code in own scope */
return foo(bar);
})();
In this case IIF
is just a module
which exports something outside.
Solution 3 - Javascript
The closure function is used to encapsulate some of the attributes / methods in the function. Much like the private / public principle from other languages.
You can find more on this topic here under Module Pattern