JAyP JAyP - 4 months ago 4x
Node.js Question

Why is this function executed?

I need help with understanding how the following script is working.

var foo = function() {

(function() {
// Empty

When running this script with node (v5.9.1) the output is "A". I would expect it to just do nothing. Why is foo executed here? I can either delete the first or last three lines and then there is no output.

  • Edit: it works as expected if I place a
    after the curly bracket on line 3. But why?


If you put (...) immediately after a function expression, you execute that function.

The code in the question defines a function which calls console.log. Then it calls that function (passing it an argument (which isn't used) of a function which does nothing anyway). Then it assigns the return value of calling the first function to foo.

It could be rewritten as:

var function_a = function() {console.log("A");};
var function_b = function() {};
var foo = function_a(function_b);

… with the only side effects being the creation of the function_a and function_b variables.

Semi-colon insertion is usually considered harmful because it leads people to expect whitespace to separate the statement into two unrelated expressions.

JSHint would warn you of the problem:

7 Missing semicolon.