Nie ma absolutnie żadnej różnicy w znaczeniu lub wydajności w JavaScript lub ActionScript.
var
jest dyrektywą dla parsera, a nie komendą wykonywaną w czasie wykonywania. Jeśli określony identyfikator został zadeklarowany var
raz lub więcej w dowolnym miejscu w treści funkcji (*), wówczas wszelkie użycie tego identyfikatora w bloku będzie odnosić się do zmiennej lokalnej. Nie ma znaczenia, czy value
deklaruje się, że var
znajduje się w pętli, poza nią, czy w obu.
W związku z tym powinieneś napisać, co uznasz za najbardziej czytelne. Nie zgadzam się z Crockfordem, że umieszczenie wszystkich zmiennych na szczycie funkcji jest zawsze najlepszą rzeczą. W przypadku, gdy zmienna jest używana tymczasowo w sekcji kodu, lepiej zadeklarować var
w tej sekcji, aby sekcja była samodzielna i można ją było wkleić. W przeciwnym razie skopiuj i wklej kilka wierszy kodu do nowej funkcji podczas refaktoryzacji, bez osobnego wybierania i przenoszenia powiązanych var
, a otrzymasz przypadkowe globalne.
W szczególności:
for (var i; i<100; i++)
do something;
for (var i; i<100; i++)
do something else;
Crockford zaleci usunięcie drugiego var
(lub usuń oba var
s i wykonaj var i;
powyższe), a jslint będzie cię za to płakał. Ale IMO jest łatwiejsze w utrzymaniu, zachowując oba var
powiązane kody, zamiast mieć dodatkowy, łatwo zapominany kawałek kodu na górze funkcji.
Osobiście staram się zadeklarować jako var
pierwsze przypisanie zmiennej w niezależnej sekcji kodu, niezależnie od tego, czy istnieje inne oddzielne użycie tej samej nazwy zmiennej w innej części tej samej funkcji. Dla mnie konieczność deklarowania var
w ogóle jest niepożądaną brodawką JS (byłoby lepiej, gdyby zmienne były domyślnie lokalne); Nie uważam za swój obowiązek powielać ograniczeń [starej wersji] ANSI C również w JavaScript.
(*: inne niż w zagnieżdżonych obiektach funkcyjnych)