Let vs var. Const


ECMAScript 6 предложил два новых оператора let и const, они могут во многих случаях заменить привычное var, а руководство по стилю кода AirBnB https://github.com/airbnb/javascript упоминает правило no-var. Впрочем, использование var не является криминалом, а JavaScript-гуру Кайл Симпсон, автор книги  "You Don't Know JS" написал статью в которой утверждает, что использование let имеет как преимущества, так и недостатки For and against `let` (статья, кстати, хорошая и умная). Его аргументы в пользу использования var:
1. У var и let свои области действия, отказываясь от использования какой-то из этих переменных мы добровольно сужаем свои возможности
2. У var функциональная область видимости, у let – блочная. если нужно, чтобы переменная была видна исключительно в пределах блока, используем let, если не исключено, что переменная понадобится в каком-то месте функции – var.
3. Для идеального кода действительно можно обойтись использованием исключительно let. Но так как код пишут люди, которым свойственно ошибаться, var по-прежнему необходима.

Последний аргумент для меня особенно важен. И первый тоже. И ещё я против радикалов, призывающих полностью отказаться от var, потому что радикализм практически всегда означает узость взглядов и несвободу.

Разница между let и var

1. Область видимости var ограничена функциональным блоком, область видимости let - любой блок, ограниченый фигурными скобками, который может быть меньше функциональной области видимости.
Переменная, определенная с использованием оператора var известна во всей функции, в которой она определена, начиная с начала функции. Переменная, определенная с помощью оператора let известна только в блоке, в котором она определена, начиная с момента ее определения.

2. Обращение к объявленой через var переменной до того, как до неё дойдёт выполнение кода, возвращает undefined, при таких же условиях обращение к let вызывает исключение ReferenceError.


3. В консоли Firefox использование let при отладке кода вызывает ошибку redeclaration of let, а перезагружать страницу каждый раз после внесения изменений в код совсем неудобно. Поэтому для меня предпочтительней var так как var позволит повторно объявить одну и ту же переменную в той же области.

4. let должна использоваться в цикле for так как let создает свою собственную лексическую область видимости. В следующем коде let выведет цифры от 0 до 4, а var пять раз выведет 5

for(let i = 0; i < 5; i++){
  setTimeout(function(){
    console.log(i);
  },100);
}

Собственно. мы всегда старались поместить объявление счётчика внутрь цикла, словно инстинктивно пытались оградить его от остальной части кода. Переменная let позволила нам это сделать.

Что касается const. такое объявление означает что переменная не может быть переназначена

Дополнительная информация:
Какая разница между использованием "let" и "var" для объявления переменной в JavaScript?
Где использовать "var" и где "let" в javascript?
Var, let или const? Проблемы областей видимости переменных и ES6