Руководство Бабеля по ES6 гласит:
let
это новыйvar
.
Очевидно, единственное отличие состоит в том, что var
область видимости отображается в текущей функции , а let
область видимости - в текущий блок . В этом ответе есть несколько хороших примеров .
Я не вижу никакой причины для использования var
в коде ES6. Даже если вы хотите охватить данную переменную для всей функции, вы можете сделать это let
, поместив объявление в верхнюю часть функционального блока, что и должно быть в var
любом случае, чтобы указать фактическую область действия. И если вы хотите поместить что-то более точное в for
блок или что-то еще, то вы можете сделать это тоже.
Так что мой инстинкт - var
вообще прекратить использовать при написании кода ES6.
У меня вопрос, я не прав? Есть ли законный случай, когда var
предпочтительнее let
?
let
оператор прямо в верхнюю часть функции, я думаю, также очевидно, что вы намеревались охватить его всей функцией. Я не думаю, что использование var
делает это более понятным, чем просто найти его сверху.
var
все еще существует, это обратная совместимость. Если бы не это, они бы вообще удалили var
или вообще не представили let
бы, вместо этого изменив семантику var
на то, что, вероятно, должно было быть все время.
var
кажутся мне неясными , и их недостаточно для того, чтобы иметь в виду переменную третьего типа, которая прыгает вокруг. Вы можете охватить let
целую функцию a, просто поместив ее в верхнюю часть функции, что гораздо понятнее по замыслу, чем запись var
в блоке (чтобы вывести ее из этого блока, чтобы затем использовать ее вне блока - странно) Он предупреждает, что если вы добавляете a let
к функции, то «это просто позиция, которая сигнализирует о разнице, а не о синтаксисе», но я думаю, что это хорошо.
var
. примеры, которые он представляет для хранения, var
кажутся надуманными и основаны на серьезных ошибках кодирования. Гораздо лучше столкнуться с ошибкой и быть вынужденной исправлять такие ошибки, чем использовать языковые функции, которые позволяют сойти с рук! Что дальше, посоветуйте обернуть все в try / catch, чтобы предотвратить сбои? Остальная часть этой ссылки хороша, но я совсем не согласен с этой конкретной частью.
var
в качестве сознательного индикатора того, что эта переменная предназначена для охвата всей функции, может быть полезным соглашением о «самодокументировании» ,