javascriptの関数リテラル(っていうの?)が分かった気がした

function testFunc(str){
alert(str)
}
testFunc("こんにちはこんにちは")

関数を用意して、引数をつけて実行する、というのは普通のことです。でもjavascript界ではそういう書き方はレガシーだ、クールじゃない、アホ、氏ね、という扱いになるので、かっちょよく書かないといけません。いけなくないんだけど。

上と同じことを書いているのがこちら。

(function testFunc(){
alert(str)
})("こんにちはこんにちは")

ポイントは2つくらいあって、まず function(){} を (function(){})と、かっこで包んでいること。これによって関数っぽく見えるtestFuncが関数リテラルという、まぁ、文章か何かになるらしいです。
そして引数は最後の("こんにちはこんにちは")ですが、関数リテラル野郎はここで引数をつけているわけですね。

さらにこれは、明示的に testFunc(); などと書かなくても、そのまま実行されちゃいます。だから関数だけ用意しておいて後で呼び出すぜ! っていうときは普通に関数を書きます。

よく分かってないけどこれの利点があったら教えてください。今っぽい書き方、っていうだけじゃないよね。