Closures are one of the most powerful features available at runtime, but they are also one of the most misunderstood. The Mozilla developer network defines closures as follows:

"Closures are functions that refer to independent (free) variables. In other words, the function defined in the closure 'remembers' the environment in which it was created."

We understand independent (free) variables as variables that persist beyond the lexical scope from which they were created. Let's take a look at an example:

function makeArmy() {
  var shooters = []
  for(var i = 0; i < 10; i++) {
    var shooter = function() { // a shooter is a function
      alert(i) // which should alert it's number
  return shooters;

We have declared a function ...

Get TypeScript: Modern JavaScript Development now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.