Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What does the leading semicolon in JavaScript libraries do?

People also ask

What is the semicolon used for in JavaScript?

Semicolons are an essential part of JavaScript code. They are read and used by the compiler to distinguish between separate statements so that statements do not leak into other parts of the code.

Why does the following JavaScript code end with a semicolon?

In case there is a semicolon after the function declaration, the semicolon is parsed as a separate empty statement, which doesn't do anything. The upside is that empty statements following function declarations do no harm; the downside is that they don't provide any value whatsoever (here).

Should I use semicolons in ES6?

Even Google's summarized ES6 style guide continues to require semi-colons. There is a good reason. As developers we should know that when you remove a feature there will inevitably be users who relied on that feature to help them accomplish their task (in this case, we all program and write code :)).


It allows you to safely concatenate several JavaScript files into one, to serve it quicker as one HTTP request.


The best answer was actually given in the question, so I will just write that down here for clarity:

The leading ; in front of immediately-invoked function expressions is there to prevent errors when appending the file during concatenation to a file containing an expression not properly terminated with a ;.

Best practice is to terminate your expressions with semicolons, but also use the leading semicolon as a safeguard.


In general, if a statement begins with (, [, /, +, or -, there is a chance that it could be interpreted as a continuation of the statement before. Statements beginning with /, +, and - are quite rare in practice, but statements beginning with ( and [ are not uncommon at all, at least in some styles of JavaScript programming. Some programmers like to put a defensive semicolon at the beginning of any such statement so that it will continue to work correctly even if the statement before it is modified and a previously terminating semicolon removed:

var x = 0 // Semicolon omitted here
;[x,x+1,x+2].forEach(console.log) // Defensive ; keeps this statement separate

Source:

JavaScript: The Definitive Guide, 6th edition


This is referred to as a leading semicolon.

Its main purpose is to protect itself from preceding code that was improperly closed, which can cause problems. A semicolon will prevent this from happening. If the preceding code was improperly closed then our semicolon will correct this. If it was properly closed then our semicolon will be harmless and there will be no side effects.


A one-line answer is to safely concatenate multiple JavaScript files. Using a semicolon does not raise an issue.

Suppose you have multiple functions:

IIFE 1

(function(){
  // The rest of the code
})(); // Note it is an IIFE

IIFE 2

(function(){
   // The rest of the code
})(); // Note it is also an IIFE

On concatenation it may look like:

(function(){})()(function(){})()

But if you add a semicolon before the function it will look like:

;(function(){})();(function(){})()

So by adding a ;, it takes care if any expression is not properly terminated.

Example 2

Assume you have a JavaScript file with a variable:

var someVar = "myVar"

Another JavaScript file with some function:

(function(){})()

Now on concatenation it will look like

var someVar = "myVar"(function(){})() // It may give rise to an error

With a semi-colon, it will look like:

var someVar = "myVar";(function(){})()