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

for num in array 
    //do something 

¿Cuál es el valor de num en el contexto del resto de la función? ¿num obtiene el alcance del ciclo?¿Alcance variable en coffeescript para loop?

+0

¿Qué pasó cuando lo ejecutó? – Mehrdad

+0

Puede probar cosas de CoffeeScript y ver el resultado compilado [aquí] (http://jashkenas.github.com/coffee-script/#try:array%20%3D%20 [1% 2C2% 2C3% 2C4]% 0A % 0A para% 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

Respuesta

17

No, num no obtiene el alcance al lazo. Como puede ver en el JS compilado (como se señaló en @epidemian), es una variable de ámbito actual, por lo que puede acceder a él también en el resto de la función (por ejemplo, el resto del alcance actual).

Pero tenga cuidado en el caso de la definición de devolución de llamada de la función dentro del bucle:

array = [1, 2, 3] 

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

salidas

3 
3 
3 

Para capturar variable actual dentro de la devolución de llamada, debe utilizar do que simplemente se llama a la función:

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

eso es complicado hahah – mateusmaso

+0

He creado algunas condiciones de carrera deliciosas con este error, estar cansado – wmarbut

+0

Acabo de recibir un poco de esto, también. Siento que 'do (num) ->' debería ser el comportamiento predeterminado. – ndbroadbent