¡Hola Fran!
Te lo explicaré con un ejemplo muy simple :)
Tenemos el siguiente código:
if (color = "rojo"){
accion1;
} else if (color = "verde"){
accion2;
} else if (color = "azul"){
accion3;
} else if (color = "amarillo"){
accion4;
}
Pues ahora imaginemos que el color que se está evaluando, en realidad es el color rojo.
Esto significa que se ejecutará la accion1.
El resto de las evaluaciones ya no se resuelven porque ya se ha ejecutado la accion1 y no es necesario volver a validar el color, porque ya sabemos que es rojo y la sentencia if-else se lee como "si, sino si"... Es decir, es esto, y sino entonces es esto otro... Hay una condición que si se cumple, terminamos, si no se cumple, entonces seguimos evaluando.
Finalmente en este trozo de código solo se evalúa 1 vez, entonces es un código de buen rendimiento ya que mientras menos instrucciones deba procesar nuestro computador, más rápido obtendremos nuestro resultado.
Pero, ¿Qué pasaría si omitimos los else?
if (color = "rojo"){
accion1;
} if (color = "verde"){
accion2;
} if (color = "azul"){
accion3;
} if (color = "amarillo"){
accion4;
}
Ahora la sentencia ha cambiado, ya no le estamos diciendo "si, sino si..."
Ahora solo le estamos diciendo "si..."
Entonces, ya sabemos que el color es rojo, entonces se ejecuta la accion1. Pero también se evaluará la segunda opción, cuando el color es verde, claro que no se ejecutará la accion2 porque el color no es verde. Luego se evaluará la tercera y la cuarta condición, todas se van a evaluar.
Entonces, a diferencia de nuestra primera versión que solo hizo 1 evaluación, ésta segunda versión es más pesada, menos eficaz, porque el equipo tuvo que procesar la condición 4 veces, y te tardó un poco más en darnos una respuesta.
Esta es la diferencia entre ocupar los else, y no ocuparlos.