¿Cómo escribir esto en coffeescript?
f = (function(){
// something
})();
Gracias por los consejos :)
¿Cómo escribir esto en coffeescript?
f = (function(){
// something
})();
Gracias por los consejos :)
Respuestas:
Si bien puede usar paréntesis (por ejemplo (-> foo)()
, puede evitarlos usando la do
palabra clave:
do f = -> console.log 'this runs right away'
El uso más común de do
es capturar variables en un bucle. Por ejemplo,
for x in [1..3]
do (x) ->
setTimeout (-> console.log x), 1
Sin el do
, solo estaría imprimiendo el valor de x
después del ciclo 3 veces.
-> console.log 'this runs right away'
a f
, luego la ejecuta; el tuyo ejecuta la función y luego asigna su resultado a f
, como en la pregunta original. (Aunque en el caso de console.log
, el valor de retorno es siempre de undefined
todos modos.)
{f: do -> // something}
do
también le permite pasar argumentos a la función. Para pasar 1
y 2
como los parámetros x
y y
, escribir do (x = 1, y = 2) ->
. (La documentación de esta función se ha perdido , pero el problema en el que se introdujo la función tiene algunos ejemplos).
Si desea "alias" los argumentos pasados a la función autoinvocada en CoffeeScript, digamos que esto es lo que está tratando de lograr:
(function ( global, doc ) {
// your code in local scope goes here
})( window, document );
Entonces do (window, document) ->
no te dejará hacer eso. El camino a seguir es con parens entonces:
(( global, doc ) ->
# your code here
)( window, document )
do (global=window, doc=document) ->
También puede combinar la do
palabra clave con los parámetros de función predeterminados para generar "funciones de autoiniciación" recursivas con un valor inicial. Ejemplo:
do recursivelyPrint = (a=0) ->
console.log a
setTimeout (-> recursivelyPrint a + 1), 1000
tratar de usar
do ($ = jQuery) ->
do ->
#your stuff here
Esto creará un cierre autoejecutable, que es útil para establecer el alcance.
Disculpas, lo resolví:
f = (
() -> "something"
)()
do
palabra clave tiene algunas limitaciones que hacen que sea necesario utilizar el enfoque de estilo JS en ocasiones (consulte el número 960 ); do
en realidad solo se agregó debido al caso de uso de bucle con cierres.
Debería ser
f = () ->
# do something
f = do -> console.log x