2012-05-02 7 views
17

Poniższy kod:JSHint uważa zmienną wejściową "zły". Co to znaczy?

var things = {'foo':'bar'} 
for (thing in things) { 
    console.log(thing) 
} 

Konsekwentnie produkuje następujący błąd w jshint:

Bad for in variable 'thing'. 

ja nie rozumiem, co sprawia, że ​​„coś” zmienna „złe” - jak widać, jest to nie są używane nigdzie indziej. Co powinienem zrobić inaczej, aby jshint nie uznał tego za błąd?

+9

Jest globalny, co zawsze jest złe (złe, złe, złe, złe). Spróbuj 'dla (var rzecz w rzeczach)'. Nie wiem, czy to jest powód błędu :) –

+1

JSHint chce, aby zmienne 'for in' były zdefiniowane w zasięgu lokalnym (tj. Nie w funkcji zewnętrznej). Jest to związane z tym problemem: https://github.com/jshint/jshint/issues/329 – dave1010

+2

Ponieważ "zły" jest tak nieprecyzyjny, wysłałem żądanie ściągnięcia do jshint, aby jednoznacznie stwierdził, że zmienna jest globalna. – mikemaccana

Odpowiedz

26

Zawsze są - jeśli nie są zadeklarowane. Spróbuj dodać var, jeśli nie został wcześniej zadeklarowany thing.

for (var thing in things) { 
    console.log(thing) 
} 

lub

var thing; 

//more code 

for (thing in things) { 
    console.log(thing) 
} 
+8

Dzięki! Chciałabym, żeby jshint powiedział "Nierejestrowana zmienna" zamiast "Zła zmienna" - byłoby to o wiele jaśniejsze. – mikemaccana

+0

Nie ma za co! – Dutchie432

3

Oto kod nieznacznie zmodyfikowane, upewnij się, że wszystko jest zadeklarowane przed użyciem.

var things = {'foo':'bar'}, thing; 
for (thing in things) { 
    console.log(thing) 
}