私は長年 JavaScript を使用して数え切れないほどの関数を作成してきましたが、今日、この 2 つの関数定義の違いを本当に理解しました。自分自身に良い基礎を築くためにこのエッセイを書きました。理解するには古すぎます。
通常、関数を定義するには次の 2 つの方法があります:
//式定義
var fnx=function(str)
{
console.log(str ' from fnx');
};
どちらのメソッドも新しい関数オブジェクトを作成しますが、関数宣言ステートメント内の関数名は変数名であり、var を介して変数を宣言するのと同じように、変数は関数オブジェクトを指します。関数定義ステートメント内の関数は明示的に拡張されます。スクリプトまたは関数の先頭に追加されるため、スクリプト全体および関数内で参照できますが、var 式を使用して関数を定義すると、変数宣言のみが前方に移動され、変数初期化コードは元の場所に残ります。 function ステートメントで作成された関数、関数名、関数本体が先頭に追加されるため、宣言する前に関数を使用できます。
コード例は次のとおりです。
console.log(typeof(fnx)) // 未定義
if(fnx)
fnx('abc'); // 実行されません
else
console.log('fnx は未定義です') // fnx は未定義です
// 関数ステートメント
function fn(str)
{
console.log(str);
};
// 式の定義
var fnx=function(str)
{
console.log(str ' from fnx');
};