Чем let отличается от var?

Подскажите пожалуйста, в чем различия между этими переменными? в каких случаях что лучше использовать?

Первое это то что let существует только в том блоке в котором она обьявлена, в отличии от var, вот пример:

var some_var = 5;

if
(true) {
var some_var = 10;

alert(some_var); // 10 (внутри блока)
}

alert(some_var); // 10 (снаружи блока то же самое)


let some_let = 5; //

if (true) {
let some_let = 10;

alert(some_let); // 10 (внутри блока)
}

alert(some_let); // 5 (снаружи блока значение не изменилось)

Второе это то что var существуют до обьявления в глобальной переменной window, а let существуют только после создания, тоесть если вызвать переменную var до момента создания то нам покажет что такая переменная есть но значение у неё undefined, если же такое попробовать провернуть с let то будет ошибка и нам скажут что такой переменной нет.

Еще одна деталь это то что в цикле for например если итератор объявлен через var то он один а если let то при каждой итерации создается новая переменная.

Теперь зная различия думай в каких ситуациях что лучше)