これは関数宣言。function 文。式ではなく文!
function f(){ }

文では巻き上げできる。
上で関数を呼び出して、下で定義できる
f();
function f(){ }

下は関数式。文ではなく式!
下の無名関数をよく使う。
var f = function f(){ };
var f = function(){ };

式にすると、関数の引数・戻り値として渡せる。
第一級関数だから、関数もオブジェクトとして扱える

() を付けると、即時実行。
IIFE (Immediately Invoked Function Expression; 即時実行関数式)

下のように、()で囲むと式になるので、即時実行できる。
文は即時実行できない
var f = function(){ }();
(function(){ })();