2012-05-30 3 views
5
array = [1,2,3,4] 

for num in array 
    //do something 

Jaka jest wartość num w kontekście pozostałej części funkcji? Czy num ma zasięg w pętli?Zmienna zakres w coffeescript dla pętli?

+0

Co się stało po uruchomieniu? – Mehrdad

+0

Możesz wypróbować artykuly CoffeeScript i zobaczyć skompilowany wynik [tutaj] (http://jashkenas.github.com/coffee-script/#try:array%20%3D%20 [1% 2C2% 2C3% 2C4]% 0A % 0A dla% 20num% 20in% 20array% 0A% 20% 20konsole.log% 20% 27przenośne% 20poł.% 27% 2C% 20num% 0A% 0Akonsole.log% 20% 27naft% 20poł.% 27% 2C% 20num% 0A) = D – epidemian

Odpowiedz

17

Nie, num nie jest objęty zasięgiem pętli. Jak widać w skompilowanym JS (jak wskazał @epidemian) jest to bieżąca zmienna zasięgu, więc można uzyskać do niej dostęp również w pozostałej części funkcji (np. Reszta bieżącego zakresu).

jednak być ostrożnym w przypadku definiowania funkcji wywołania zwrotnego wewnątrz pętli:

array = [1, 2, 3] 

for num in array 
    setTimeout (() -> console.log num), 1 

wyjść

3 
3 
3 

Aby uchwycić zmienną obecną wewnątrz zwrotnego, należy użyć do który po prostu wywołuje funkcję:

for num in array 
    do (num) -> 
     setTimeout (() -> console.log num), 1 
+1

To jest trudny jeden hahah – mateusmaso

+0

Stworzyłem wspaniałe warunki wyścigowe z tym błędem, bądźcie znużeni. – wmarbut

+0

Po prostu też się tym zajmę. Mam wrażenie, że 'do (num) ->' powinno być domyślnym zachowaniem. – ndbroadbent