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

for num in array 
    //do something 

Qual è il valore di num nel contesto del resto della funzione? num ha ambito il ciclo?Ambito variabile in coffeescript per loop?

+0

Cosa è successo quando lo hai eseguito? – Mehrdad

+0

Puoi provare i contenuti di CoffeeScript e vedere il risultato compilato [qui] (http://jashkenas.github.com/coffee-script/#try:array%20%3D%20 [1% 2C2% 2C3% 2C4]% 0A % 0Aper% 20num% 20in% 20array% 0A% 20% 20console.log% 20% 27inside% 20loop% 27% 2C% 20num% 0A% 0Aconsole.log% 20% 27outside% 20loop% 27% 2C% 20num% 0A) = D – epidemian

risposta

17

No, num non viene limitato l'ambito del ciclo. Come puoi vedere in JS compilato (come sottolineato da @epidemian) è la variabile di oscillazione corrente, quindi puoi accedervi anche nel resto della funzione (ad esempio il resto dello scope corrente).

Ma attenzione in caso di definizione di funzione di callback all'interno del ciclo:

array = [1, 2, 3] 

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

uscite

3 
3 
3 

Per catturare variabile corrente all'interno della richiamata, è necessario utilizzare do che chiama semplicemente la funzione:

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

questo è un ingannevole hahah – mateusmaso

+0

ho creato alcune condizioni di gara deliziose con questo errore, essere stanco – wmarbut

+0

po Appena ricevuto da questo, anche. Mi sembra che 'do (num) ->' dovrebbe essere il comportamento predefinito. – ndbroadbent