Ответ 1
Новые let
и const
в ES2015 (aka "ES6" ) имеют четыре основных отличия по сравнению с почтенным var
:
-
У них есть область видимости
-
Они не подняты (ну, они вроде подняты, но полезны)
-
Повторяющиеся объявления - это ошибки
-
При использовании в глобальной области действия они не создают свойства глобального объекта (несмотря на создание глобальных переменных, это новая концепция ES2015)
Область блока
var
переменные существуют во всей функции, в которой они объявлены (или глобально, если объявлены глобально), они не ограничены блоком, в котором они находятся. Таким образом, этот код действителен:
function foo(flag) {
a = 10;
if (flag) {
var a = 20;
}
return a;
}
console.log(foo(false)); // 10
console.log(foo(true)); // 20