Un closure la combinación de una función y el ámbito léxico en cúal ha sido declarada dicha función.
Un closure recuerda el ámbito en el cual fue creado.
Ámbito léxico : es cuando las funciones se ejecutan utilizando la cadena del alcance donde estaba vigente en el momento de su creación accediendo a ese espacio de memoria y poder tomar el valor de la variable dentro de la función.
Variable privadas : Mediante closures podemos crear variables que sean accedidas sólo mediante métodos definidos y no puedan ser accedidos directamente fuera de la función en que fueron definidos y así funcionen de manera privada ya que nativamente javascript no fomenta el uso de este tipo de datos privados.
Loops : Al crear ciclos iterativos se crean closures por lo que tenemos que tener cuidado al momento de declarar nuestras variables porque se puede perder control de lo creado y los resultados no serán los esperados.