How to pass two anonymous functions as arguments in CoffeScript?
I want to pass two anonymous functions as arguments for jQuery's hover, like so:
$('element').hover(
function() {
// do stuff on mouseover
},
function() {
// do stuff on mouseout
}
);
It's easy with just one – hover ->
– but what is the proper syntax in CoffeeScript for two? I tried ...hover ->
, ...hover( ->...
, etc. but nothing gets me the above structure.
Solution 1:
I think the problem lies with using single line comments //
. Single-line comments enclosed in /* .. */
seem to work fine. Here's an equivalent example with something other than a comment.
$('element').hover(
-> console.log("first")
-> console.log("second")
)
Or with comments using /* .. */
.
$('element').hover(
-> /* first */
-> /* second */
)
You can try these examples under the Try CoffeeScript tab. CoffeeScript adds a return statement to return the last expression of the function. If you wanted bare-bones functions which do nothing and don't contain a return
at the end, try:
$('element').hover(
() ->
() ->
)
// $('element').hover(function() {}, function() {});
Solution 2:
Put parentheses around the anonymous functions.
Solution 3:
Another way is to use backslash after the caller function, the comma should be indented correctly.
$('element').hover \
-> # do stuff on mouseover
,
-> # do stuff on mouseout
Solution 4:
Without parenthesis or backslash:
f ->
0
, ->
1
Output on 1.7.1:
f(function() {
return 0;
}, function() {
return 1;
});