2012-08-08 14 views
11

El siguiente código CoffeeScript:CoffeeScript do, pasan argumento

do (a) -> 
    console.log a 

genera esto:

(function(a) { 
    return console.log(a); 
})(a); 

¿Cómo pasar un valor a una como esta?

(function(a) { 
    return console.log(a); 
})("hello"); 

Respuesta

20
do (a = 'hello') -> 
    console.log a 

Will generate exactamente lo que quiere.

Sin embargo, tengo que admitir que no puedo ver el punto de hacer eso. Si realmente quiere a para tomar el valor literal 'hello' dentro de ese ámbito, entonces ¿por qué hacer otro alcance? Con a siendo una variable normal declarada como a = 'hello' será suficiente. Ahora, si quiere reemplazar a con el valor de otra variable (que puede cambiar en un bucle o algo así) y hacer do (a = b) ->, entonces creo que tiene más sentido, pero puede hacer do (a) -> y simplemente usar a en lugar de b dentro del do alcance.

+9

'do ($ = jQuery) ->' es un caso de uso común –

+0

es bueno para el uso dentro del bucle que crea cierres múltiples, de modo que cada iteración de bucle (cada cierre) tiene su propia variable. –

2

do es una palabra clave especial en CoffeeScript. Crea un cierre. Creo que quieres algo como esto:

log = (msg) -> 
    console.log msg 

compila en:

var log; 

log = function(msg) { 
    return console.log(msg); 
}; 

usarlo como cualquier otra función: log("hello")

2

se podía hacer esto

do (a = "foo")-> 
    console.log a 

Pero en realidad ¿por qué haces esto? ¿Cuál es el caso más completo uso que usted está tratando de poner en práctica

+2

Para entender CoffeeScript mejor. ¡Gracias por la respuesta! – chenglou

3

Si está utilizando el Module Pattern, esto es útil utilizar el $ mundial cuando se utilizan varias bibliotecas de JavaScript que pueden entrar en conflicto entre sí:

mySingleton = do ($ = jQuery) -> 
    colorIt -> $('.colorme').css('backgroundColor', 'red') 

mySingleton.colorIt()