The reason for this is that parentheses for calling a function (call) are optional. I find this a constant confusion in my own code, and I always follow a common policy, including parentheses, to clarify.
In a coffee script, if you leave parentheses around, it is assumed that the argument list moves to the end of the line. Your first coffee script example is actually the same:
nums = [1..10].map((i) -> i*2)
where the first argument to calling map is the function (i)->i*2
(i), script . script :
nums = [1..10].map(i)(-> i*2)
, i , script map(i) , ->i*2, ()->i*2 .
, script javascript, , , .