125

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
  • 7,573
  • 8
  • 42
  • 61
  • 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

52

This is a poor example. Consider the following:

var a = (function() {
  var ret = {};
  ret.test = "123";

  function imPrivate() { /* ... */ }
  ret.public = function() {
    imPrivate();
  }
  return ret;
})();

console.log(a)

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.

simo54
  • 218
  • 5
  • 16
Chad Carisch
  • 2,422
  • 3
  • 22
  • 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,220
  • 1
  • 15
  • 28
Alex
  • 11,115
  • 12
  • 51
  • 64
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,389
  • 6
  • 36
  • 69