Awkward way of executing JavaScript code

Javascript

Javascript 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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionPassidayView Question on Stackoverflow
Solution 1 - JavascriptChad CarischView Answer on Stackoverflow
Solution 2 - JavascriptPinalView Answer on Stackoverflow
Solution 3 - JavascriptAnonymooseView Answer on Stackoverflow