Un closure es simplemente un comportamiento de las funciones en JavaScript. Sucede cuando una función padre retorna una función hija, al hacer esto la función hija recordará el scope donde fué definida:

var ShoppingCart = function() {
  var total = 0;

  return function addProduct(price) {
    return total+= price;
  };

};

var myShoppingCart = new ShoppingCart();

console.log(myShoppingCart(7)); // 7
console.log(myShoppingCart(5)); // 12