CoffeeScriptで即時関数

CoffeeScriptで即時関数は書けないのかなーと思っていろいろ試してみたら書けた。
環境:CoffeeScript 1.1.1

(->
  console.log 1
  return
)()

()で囲んでやればいいのか。


追記:
id:murky-satyrさんにコメントで教えてもらった!

do ->
  console.log 1
  return

最初に書いた方はCoffeeScriptなのにシンプルな書き方じゃないなー、と思ってたらたまたま即時関数として解釈されてただけだったみたい?


公式に書いてあるとしたら

CoffeeScript provides the do keyword, which immediately invokes a passed function, forwarding any arguments.

これ、かな……?


追記2:
即時関数に引数を渡す場合は最初に書いた感じにしないと渡せないみたい……?

((num) ->
  console.log num
  return
)(123)


追記3:
Anonymousさんにコメントで教えてもらった!

do (num) ->
  console.log num
  return

てやると

(function(num) {
  console.log(num);
})(num);

コンパイルされる。doの前にnum = 1とかやっておけば渡せるね!

do (123) ->

は無理だった。というか定数を渡す意味がないしねえ。


追記4:
定数も渡せるじゃん!

do (d = document) ->
  divs = d.querySelectorAll 'div'
  return

(function(d) {
  var divs;
  divs = d.querySelectorAll('div');
})(document);

になるよ!


個人的には

(function(d) {
  var divs;
  divs = d.querySelectorAll('div');
}(document));

になって欲しかったけど。