En tiempos pasados de Javascript no existían las variables let y const, solo había variables creadas con var. Como es un lenguaje retrocompatible (de lo contrario si cambiaran algo importante de Javascript dejarían de funcionar webs antiguas), han tenido que inventarse dos maneras nuevas de definir variables: let y const, tienes más info de estas variables en el artículo de Variables.

La pega que tienen las variables var es que NO son locales al bloque en el que están definidas, por ejemplo este código:

function logTotal(price) {
  if (price > 200) {
    var sum;
  }
  console.log(sum);
}

El ejemplo es un poco chorra, pero es para ilustrar que puedes leer las variables de dentro del if y no da error, en otros lenguajes de programación suele ser típico que las variables de dentro del if solo se puedan usar dentro del if, esto permite que tengamos menos errores a la hora de programar.

Esto pasa porque Javascript lo primero que hace es leer las variables var y las ejecuta lo primero, a esto se le conoce como hoisting.

function logTotal(price) {
  var sum;
  if (price > 200) {
  
  }
  console.log(sum);
}

Mucho ojo porque si declaramos la variable con un valor entonces se hace hoisting de la declaración de la variable pero no de la asignación, ejemplo:

function logTotal(price) {
  if (price > 200) {
    var sum = 200;
  }
  console.log(sum);
}

Sería ejecutado como:

function logTotal(price) {
  var sum;
  if (price > 200) {
    sum = 200;
  }
  console.log(sum);
}

Esto permite que se puedan usar variables antes de ser declaradas (esto no lo recomiendo nunca, el código se vuelve muy lioso), por ejemplo:

function logTotal() {
  total = 300;
  var total;
  console.log(total);
}

Pero ojo, porque esto no aplica a las funciones, es decir, las variables var solo serán accesibles dentro de la función en la que están definidas, esto SÍ daría error:

function logTotal(price) {
  var total = 200;
  console.log(price);
}

console.log(total);

Otra desventaja de las variables var es que se pueden redeclarar, usando var otra vez. Esto con let y const no pasa, así te evitas errores de crear una variable que ya existe sin querer.

Por ejemplo este código funcionaría

function logTotal(price) {
  var total = 200;
  // Una serie de cálculos complejos
  var total = 300; // Lo mismo no queremos redeclararla y deberíamos usar otro nombre	
}

Por todo esto ya no se recomienda el uso de var en Javascript, porque puede dar lugar a problemas y confusiones, mejor usar let y const para que la consola nos muestre error en caso de que estemos haciendo algo raro.