Является ли область применения всего переключателя / корпуса?
Нет, это для всей содержащей функции или глобальной области видимости, если вы находитесь вне функции.
(Есть несколько непонятных случаев, когда JavaScript вводит дополнительную область видимости, но это все.)
Предупреждение: «i» уже определено
Я не совсем согласен с тем, что это предупреждение. Я бы предпочел оставить код таким, какой он есть, с независимым использованием блоков переменной i
.
Он хочет, чтобы вы удалили var
из всех, кроме первого объявления, или, возможно, добавили var i
перед переключателем и удалили var
из всех for
. Но теперь эти блоки не одиноки, и быстрое вырезание и вставка (скажем, для рефакторинга switch
в отдельные function
s) оставляет вам циклы, ссылающиеся на i
, который не объявлено var
. Это случайный глобальный объект, и это ужасная ловушка JS, от которой можно отладить настоящую боль.
JSLint подает ту же жалобу. Я бы обычно игнорировал это. Не вредно объявлять переменную var
дважды в одном блоке.