¿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 dopalabra clave:
do f = -> console.log 'this runs right away'
El uso más común de does 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 xdespué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 undefinedtodos modos.)
{f: do -> // something}
dotambién le permite pasar argumentos a la función. Para pasar 1y 2como los parámetros xy 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 dopalabra 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"
)()
dopalabra clave tiene algunas limitaciones que hacen que sea necesario utilizar el enfoque de estilo JS en ocasiones (consulte el número 960 ); doen realidad solo se agregó debido al caso de uso de bucle con cierres.
Debería ser
f = () ->
# do something
f = do -> console.log x