名前付き関数、しかしJavaScriptにおけるFunction Expression

では次に、式の一部であるためFunction Expressionとなる名前付き関数を作成してみましょう:

javascript+function func() {
  console.log('!');
}

興味深いことに、名前funcではこの関数を参照できず、エラーが発生します:

javascript+function func() {
  console.log('!');
}

func(); //!! エラーが発生します

この関数を呼び出せるようにするには、何らかの変数に代入する必要があります:

javascriptlet test = function func() {
  console.log('!');
};

test(); // '!' を出力します

繰り返します:関数式である関数は、その名前では呼び出すことができません。 そのような関数は、その関数が代入された変数を使用してのみ呼び出すことができます。

それでも、関数式は関数名を持つことができ、それは文法的に正しいです。 これがなぜ必要なのかは、今後のレッスンで詳しく説明します。

まとめ:関数がFunction DeclarationであるかFunction Expressionであるかは、 名前があるかどうかではなく、式の一部であるかどうかによって決まります。

上記で見たように、無名関数はFunction Declarationと解釈される可能性があり、 名前付き関数はFunction Expressionとなる可能性があります。