Нет абсолютно никакой разницы в значении или производительности, в JavaScript или ActionScript.
varэто директива для парсера, а не команда, выполняемая во время выполнения. Если конкретный идентификатор был объявлен varодин или несколько раз где-нибудь в теле функции (*), тогда все использование этого идентификатора в блоке будет ссылаться на локальную переменную. Не имеет значения, valueобъявлен ли онvar внутри цикла, вне цикла или в обоих.
Следовательно, вы должны написать то, что вы считаете наиболее читабельным. Я не согласен с Крокфордом в том, что ставить все переменные на вершину функции всегда лучше. Для случая, когда переменная временно используется в разделе кода, лучше объявить varв этом разделе, поэтому этот раздел стоит отдельно и может быть вставлен в копию. В противном случае скопируйте и вставьте несколько строк кода в новую функцию во время рефакторинга, не выделяя и не перемещая связанные элементы по отдельности var, и вы получите случайную глобальную переменную.
В частности:
for (var i; i<100; i++)
do something;
for (var i; i<100; i++)
do something else;
Крокфорд порекомендует вам убрать второе var(или удалить оба varс и var i;выше), и jslint за это вам захочет. Но ИМО более приемлемо, чтобы сохранить обаvar , сохраняя весь связанный код вместе, вместо того, чтобы иметь дополнительный, легко забываемый фрагмент кода в верхней части функции.
Лично я склонен объявлять как varпервое присвоение переменной в независимом разделе кода, независимо от того, есть ли другое отдельное использование того же имени переменной в некоторой другой части той же функции. Для меня необходимость объявления varвообще является нежелательной бородавкой JS (было бы лучше иметь переменные по умолчанию локальные); Я не считаю своим долгом дублировать ограничения [старой редакции] ANSI C в JavaScript.
(*: кроме как во вложенных функциональных телах)