Я посмотрел, что переменная сфера не изолирована
Где вы смотрите, что до? В каждом учебном пособии и справочной странице JS ясно, что переменные, объявленные с var
, имеют область действия.
Я немного озадачен кажущимся увлечением начинающих программистов JS вопросами обзора и подъема. Правильный подход:
Объявите свои переменные в верхней части своей функции, где они принадлежат. Практически все руководства по стилям, если вы следуете одному, требуют этого в любом случае. Практически все линтеры, если вы используете их, будут или могут быть настроены для обеспечения этого.
Проведите время, которое вы планировали использовать, чтобы беспокоиться о подъеме, изменении области видимости и временных мертвых зонах вместо того, чтобы читать книгу, ходить по вашей собаке или на самом деле делать полезную кодировку.
Живите долгой и счастливой жизнью.
Если по какой-то причине это важно для вас, чтобы переменные области видимости блока (что-нибудь внутри {}
, такие как тело оператора if
или for
), то да, используйте let
. В реальном мире, я думаю, вы найдете такие случаи довольно небольшими, если только вы не пишете огромные функции, которые содержат десятки или сотни строк, что не является хорошей практикой для начала. В этом случае снова следуйте лучшей практике и объявите все свои переменные в верхней части блока.
Если у вас нет let
и вы хотите использовать другую переменную с одинаковым именем внутри блока, то как насчет просто использования другой переменной? Например, в примере, который вы указали, внутри блока if
используйте test1
вместо test
. Это на самом деле то, как babel делает это под обложками.Это transpiles
function f() { var x; { let x; } }
в
function f() { var x; { var _x; } }
^^
Вы увидите, что он переименовал внутренний x
к _x
.
Ваш вопрос по существу эквивалентен удивлению, почему это болит, когда вы вставляете контакты в глаза. Вместо того, чтобы беспокоиться о том, что в ваших глазах есть какие-то разные контакты, или что такое биологический механизм возникающей боли, почему бы не прекратить вставлять штыри в глаза, чтобы начать?
Используйте 'let' вместо' var'. Или, если вам нужно поддерживать старые браузеры (старый IE), используйте IIFE. – nnnnnn
* Я посмотрел, что переменная область не изолирована. * Где вы это выглядели? –
Зачем вам одно имя переменной? Просто используйте другое имя. – Thevs