Существует абсолютно без разницы в смысле или исполнении, в 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 будет плакаться на вас за это. Но IMO более удобно поддерживать как var
s, сохраняя вместе все связанный код, вместо того, чтобы иметь лишний, легко забытый бит кода в верхней части функции.
Лично я склонен объявлять как var
первое присваивание переменной в независимом разделе кода, независимо от того, существует ли другое использование одного и того же имени переменной в какой-либо другой части той же функции. Для меня обязательным объявлением var
является нежелательная бородавка JS (было бы лучше, если бы переменные по умолчанию были локальными); Я не считаю своим долгом дублировать ограничения [старой ревизии] ANSI C в JavaScript.
(*: кроме как в вложенной функции органов)
Снаружи! всегда снаружи. – BGerrissen
Хм, не объявляются ли переменные объявления в любом случае как в Javascript, так и в AS3? Если я прав, то это действительно не имеет значения. – spender
@ Энди - вы пытались назначить перед объявлением в теле функции? Возможно, ваши предубеждения ведут вас в заблуждение. Производительность WRT, с учетом масштабирования, если JS интерпретируется, то он будет переваривать дополнительные циклы в блоке цикла. Если скомпилировано (что большинство двигателей делает сейчас), это не имеет значения. – spender