2010-03-22 4 views
6

Znalazłem wiele definicje „var” stwierdzeniem, ale większość z nich są niekompletne (zwykle od wprowadzających przewodników/tutoriale). Należy używać „var” jeśli zmienna & zakres został ogłoszony na liście params?Javascript - Czy muszę używać „var” gdy realokacja zmienną zdefiniowaną w parametrów funkcja jest?

someFunc = function(someVar) 
{ 
    // Is it considered good practice to use 'var', even if it is redundant? 

    var someVar = cheese; 
}; 

Odpowiedz

15

odpowiedź brzmi: nie, nie należy tego robić. To jest właściwie uważane za złą praktykę!

JS Lint wyrzuca następujący błąd podczas analizowania przykład kodu:

problemem na linii 5 znaków 16: someVar jest już zdefiniowany.

+0

Dzięki! Dokładnie to musiałem wiedzieć: P –

+2

* Kto * uważa to za "złą praktykę"?Proszę nie mówić "robi JSLint" (ponieważ mówi również, że dobrym kodem bez dodatkowych średników jest "zła praktyka") - po prostu szukam źródeł do poparcia roszczenia, nie, żebym argumentował inaczej ;-) –

1

No. W JavaScript można bałagan z argumentem funkcji wszystko, co chcesz.

Rozważmy następujący kod, który można zobaczyć w całym Internecie i który służy do wykonywania prac kodu w standardowych modelach i IE zdarzenia:

function someEventHandler(event) { 
    event= (event) ? event : window.event; 
    // statements 
} 
+0

Thx, nie byłem pewien, czy powyższy kod był poprawny lub przestrzegany zgodnie z regułami/standardami językowymi. –

+7

Napisałbym 'zdarzenie = zdarzenie || window.event; ' –

2

Nie, kolejność, w jakiej są zdefiniowane nazwy podczas wprowadzania zakres wykonanie jest jak następuje:

  1. parametrów funkcyjnych (o wartości upłynięcie undefined)
  2. specjalne nazwy arguments (z wartością argumentów jeśli nie istnieje)
  3. deklaracje funkcji (z przywiezionym ciałem)
  4. deklaracje zmiennych (z undefined jeśli nie istnieje)
  5. nazwa bieżącej funkcji (z korpusem przedstawia sobą, jeśli nie istnieje)

Oznacza to, że w tym kodzie, foo dotyczy parametru funkcyjnego (co może być łatwo zmieniona):

function foo(foo) { 
    var foo; 
    alert(foo); 
} 
foo(1); // 1 

Jeśli używasz deklarację funkcji wewnątrz dla foo, że ciało będzie zastąpić wszystkie inne. Należy również pamiętać, że oznacza to, że można to zrobić:

function foo(arguments) { 
    alert(arguments); 
} 
foo(); // undefined 
foo(1); // 1 

nie rób tego.

4

„Znalazłem wiele definicje«var»stwierdzeniem, ale większość z nich są niekompletne.”

Spróbuj (trochę duszno, ale mam nadzieję, że pełna :-)): słowo kluczowe var deklaruje nową zmienną i wiąże go do bieżącego zakresu leksykalnego. Innymi słowy, zmienna nie będzie istnieć poza funkcją, która ją deklaruje. Parametry funkcji są niejawnie powiązane z zasięgiem tej funkcji, więc nie wymagają słowa kluczowego var.

Powiązane problemy