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:
We understand independent (free) variables as variables that persist beyond the lexical scope from which they were created. Let's look at an example:
function makeArmy() { const shooters = []; for (let i = 0; i < 10; i++) { const shooter = () => { // a shooter is a function console.log(i); // which should display it's number }; shooters.push(shooter); } return shooters; }