3

I was wondering if the following way of writing function in javascript are equal.

To me it seems they produce the same result, but in what they can be different?

First way:

(function(){
    alert('ciao')
})();

Second way:

new function bar(){alert('ciao')}; 
antonjs
  • 14,060
  • 14
  • 65
  • 91
  • Clear duplicate. http://stackoverflow.com/questions/1140089/how-does-an-anonymous-function-in-javascript-work (Could of milked this question :P ) – Layke Sep 18 '11 at 20:49
  • 3
    Tongue in cheek answer: The difference is that the second is bad form and the first is generally acceptable. – beatgammit Sep 18 '11 at 20:56

2 Answers2

3

The second one returns a new instance of the function, as if it was a constructor.

So, these are equivelent:

Traditional method:

function bar() {
    this.x = 5;
};
var x = new bar();

Lazy one-liner.

var x = new function bar() { this.x = 5; };

The only difference is that you cannot reuse bar later.

If you don't believe me, try console.log(x.y); on both examples.

Your first example is an anonymous function which is not instantiated, it is just called.

beatgammit
  • 19,817
  • 19
  • 86
  • 129
2

The first one executes the function and returns the result of it. The second one executes the function and returns an object.

EDIT: example:

enter image description here

Oscar Del Ben
  • 4,485
  • 1
  • 27
  • 41