一言で言うと、変数のスコープがブロックスコープか関数スコープかの違いです。
letを使った場合、ブロックレベルで変数のスコープが定義されるため、以下の例のように1,2,1と表示されます。
function f() {
  let x = 1;
  console.log(x);
  {
    let x = 2;
    console.log(x);
  }
  console.log(x);
}
f()
// 1
// 2
// 1
varは関数でのスコープのため、以下のように1,2,2と表示されます。
function f() {
  var x = 1;
  console.log(x);
  {
    var x = 2;
    console.log(x);
  }
  console.log(x);
}
f()
// 1
// 2
// 2
ES6からはletが使えるため、今後はvarではなく好んでletが使われるようになるかと思います。
参考
パーフェクトJavaScript |Part2 JavaScript言語仕様 - 6章 関数とクロージャ - 6-4 スコープ - 6-4-3 letとブロックスコープ