javascriptで!を使った即時関数の書き方

// わかりやすいのはこちらの書き方
(function(){ console.log("ok"); })();

// こうやっても同じ意味になる
!function(){ console.log("ok"); }();

頭にエクスクラメーションマークを付けるのは、たまに見る。
たぶん構文として定義されているわけではなく、否定演算子!の優先順がたまたま即時関数を実現するのに都合がいいものだから成立してるのだと思う。
似た構文に「!!hoge」でhogeをbool型に変換するというのもある。