Artem Tyurin

Unconventional closure

When explaining JavaScript closures we usually give an example with the outer function returning the inner function.

Following example illustrates the concept by mentioning only one function and no return keyword.

let f;

{
  let a = 1;
  f = () => a++;
}

console.log(typeof a === 'undefined'); // true
console.log(f(), f(), f()); // 1, 2, 3

In ES6, we can create scopes by using let inside of a {} block. Function f has access to all the scope variables at the moment of its creation.

Exiting the block, f closes over a, thus creating a closure.

Posted January 8, 2017

See other notes


Blog comments powered by Disqus.

Contact me

Email, GitHub