123

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?

Passiday
  • 6,753
  • 7
  • 40
  • 58
  • 1
    can you provide direct example. it depends on the situation – Vlad Nikitin Feb 03 '14 at 13:07
  • 1
    There's no reason to use that syntax there, and it doesn't appear on the page you link to. Could you link to the actual example so we can see the context? – Quentin Feb 03 '14 at 13:09
  • 1
    Oh, ok, so it's just not to leave garbage of once needed but now obsolete variables behind. – Passiday Feb 03 '14 at 13:13
  • 1
    @Quentin the actual code in the tutorial is very large and thus too specific to be included in the question. – Passiday Feb 03 '14 at 13:15

3 Answers3

51

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 Why is this function wrapped in parentheses, followed by parentheses? for more info.

Community
  • 1
  • 1
Chad Carisch
  • 2,322
  • 3
  • 20
  • 30
10
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.

Or A.
  • 1,120
  • 1
  • 13
  • 28
Pinal
  • 10,775
  • 12
  • 49
  • 62
2

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

Anonymoose
  • 2,308
  • 6
  • 35
  • 67