回答:
私が信じる短い答えは、単に名前付き関数を作成するのではなく、変数に割り当てられた無名関数を作成しているということです...
function sum() {}
違いを確認する良い方法は、それらの.ToString()を呼び出して違いを確認するか、console.log(sum.name)を実行することです。1つは実際の名前を付け、もう1つは無名関数(varに割り当てられたもの)を付けます。var sum = function(){}が実行時に定義され、関数sum(){}が解析時に定義されるように、詳細もあります。
1つの利点は、ブロック内で関数宣言を使用できないことです。それらは、ファイルの最上位にあるか、別の関数内に直接置くことができます。
if (true) {
function foo() {}
}
try {
function foo(){}
}
switch (true) {
default:
function foo(){}
}
これらはすべて標準では規定されておらず、ブラウザはさまざまなことを行います。/programming/10069204/function-declarations-inside-if-else-statementsを参照してください。したがって、他のスタイルを使用する必要がある場合は、一貫性を保つために常に使用することをお勧めします。
また、私はこれについては確信がありませんが、もし私が正しく覚えていれば、いくつかの古い縮小記号は、関数宣言を処理し、名前を変更するほど賢くありませんでした。
私はJavascriptのエキスパートではないので、これを少しずつ理解してください。私は、場合によってはスタイルのためにそれを行うかもしれず、同じことは単に「関数sum(){...}」を書くことで達成できると思う
ただし、関数を変数に割り当てることは、関数型プログラミングにおいて非常に強力な手法です。OOPに精通している場合、それは多態性にいくぶん似ています。動物の基本クラスと猫/犬の派生クラスの古典的な例を考えてみてください。Animalで動作するコードを記述できますが、関数を呼び出すと、その関数はインスタンスのタイプに応じて異なる動作をする可能性があります。
関数型プログラミングでは、「関数」で機能するアルゴリズムを使用できますが、変数を使用してその関数を呼び出す場合は、実行時に別の関数を柔軟に割り当てることができます。
たとえば、幅500ピクセルのウィンドウに10,000データポイントを表示するアルゴリズムを作成するとします。次に、各ピクセルは20個のデータポイントを表し、それらを表示するには、それらの20個のデータポイントを1つの値に集約する必要があります。
したがって、10,000ポイントを提示するアルゴリズムを定義し、このアルゴリズムが次のように集約と呼ばれる関数変数を使用するとします。
...
displayValue = aggregate( numbersInOnePixel );
...
これで、実行時にユーザーはデータの集計方法を選択できます。実際の関数変数は、次のいずれかになります。
aggregate = function sum() {...}
aggregate = function min() {...}
aggregate = function max() {...}
aggregate = function average() {...}