Hoisting and Execution Context

How do closures maintain persistent variable references between calls?
function outer() {
  var x = 10;
  function inner() {
    var y = 5;
    console.log(x + y);
    x = x + 1;
  }
  return inner;
}

var closureFn = outer();
closureFn(); // First call
closureFn(); // Second call
Next Question (17/20)