外部ファイルでは無名関数を実行できない?

上のJavaScriptでは (function(){...})() をわざわざ {...} で括っているが、これはそうしないとhtmlで読み込むJavaScriptのファイルの読み込みでエラーになるのでこうしている。なんでだろう?
の部分はブロックとみなされ {...} としたのと同じことになると聞いたことがある気がするけど。
関係あるかどうかわからないけれど、外部ファイルでEvent.observe(window, "load",...)とやるのも変な気がする。