Coffeescript --- How to create a self-initiating anonymous function?
How to write this in coffeescript?
f = (function(){
// something
})();
Thanks for any tips :)
While you can just use parentheses (e.g. (-> foo)()
, you can avoid them by using the do
keyword:
do f = -> console.log 'this runs right away'
The most common use of do
is capturing variables in a loop. For instance,
for x in [1..3]
do (x) ->
setTimeout (-> console.log x), 1
Without the do
, you'd just be printing the value of x
after the loop 3 times.
If you want to "alias" the arguments passed to self-invoking function in CoffeeScript, and let's say this is what you are trying to achieve:
(function ( global, doc ) {
// your code in local scope goes here
})( window, document );
Then do (window, document) ->
won't let you do that. The way to go is with parens then:
(( global, doc ) ->
# your code here
)( window, document )
it's ridiculous easy in coffee:
do ->
will return
(function() {})();
You can also combine the do
keyword with default function parameters to seed recursive "self-initiating functions" with an initial value. Example:
do recursivelyPrint = (a=0) ->
console.log a
setTimeout (-> recursivelyPrint a + 1), 1000
try to use
do ($ = jQuery) ->