Руководство Бабеля по 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в качестве сознательного индикатора того, что эта переменная предназначена для охвата всей функции, может быть полезным соглашением о «самодокументировании» ,