JavaScriptとJavaを比較しないでください。クマやクジラと同じくらいの共通点があります。Javaはオブジェクト指向プログラミング言語ですが、JavaScriptは関数型プログラミング言語です。
関数型言語には、ファーストクラスオブジェクトとしての関数の概念があります。関数は変数に割り当てることができ、他の関数の戻り値になる可能性があるため、引数として渡すことができます。
オブジェクトリテラルは、オンザフライでインラインで作成するオブジェクトです。同じことが関数リテラルにも当てはまります。しかし、あなたが与えている例は、実際には通常の関数宣言に似ています。
function foo()
{
alert('bar');
}
スコープの一番上に移動され、次のように変換されます。
var foo = function()
{
alert('bar');
};
関数を引数/戻り値として渡すことができる場合は、理にかなっています。
var processed = (function(someFunc)//<-- argument name
{
return function()
{
alert('I\'ll call some function in 2 seconds, get ready');
setTimeout(someFunc,2000);//<-- passes a reference to foo, as an argument to setTimeout
}
})(foo);//pass reference to function object foo here
これは、JSをJavaのサブセットとして扱うのをやめれば、JSでできるあらゆる種類のことの始まりにすぎません。