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?
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?
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
To jest trudny jeden hahah – mateusmaso
Stworzyłem wspaniałe warunki wyścigowe z tym błędem, bądźcie znużeni. – wmarbut
Po prostu też się tym zajmę. Mam wrażenie, że 'do (num) ->' powinno być domyślnym zachowaniem. – ndbroadbent
Co się stało po uruchomieniu? – Mehrdad
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