両者の本質的な違いは、「式(Expression)」か「文(Statement)」かだと考えます。 関数定義式 パターン2の書き方は関数定義式と呼びます。 var hoge = function(a, b) { ... } JavaScriptには巻上げという特異な仕様があり、実際には上の記述は以下のように分解されます。 // varの宣言はスクリプトまたは関数の行頭で行われる(巻上げ) var hoge; // この時点でhogeへアクセスするとundefined hoge = function(a, b) { ... } また、ここで行われている処理は、匿名関数を変数hogeへ代入する処理です。hoge()で実行することはできますが、この関数自体がhogeという名前は持っていません。 名前を持たせるためには、以下のように宣言する必要があります。 var hoge = function