ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript の関数宣言と式の主な違いは何ですか?

JavaScript の関数宣言と式の主な違いは何ですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-12 12:34:14357ブラウズ

What's the Key Difference Between JavaScript Function Declarations and Expressions?

JavaScript における関数式と宣言の違いを理解する

JavaScript では、式または宣言のいずれかを使用して関数を定義できます。どちらのアプローチでも再利用可能なコード ブロックを作成できますが、実行コンテキストでの動作に根本的な違いがいくつかあります。

1.関数式

関数式は、変数または定数に値として代入される匿名関数です。構文は次のとおりです。

var foo = function() { return 5; };

この例では、foo は呼び出されると値 5 を返す匿名関数 (正式名がありません) です。

2。関数宣言

逆に、関数宣言は、function キーワードに続いて名前とオプションのパラメーターを使用して宣言された名前付き関数です。

function foo() { return 5; }

この場合、foo は、実行する名前付き関数です。上記の無名関数式と同じタスク。

3.ブラウザのロードと評価

式と宣言の主な違いは、それらが実行コンテキストにどのようにロードされるかにあります。

  • 関数宣言: これらはロードされ、外側のスコープ内のコードの前に評価されます。これは、スクリプト内の位置に関係なく呼び出すことができることを意味します。
  • 関数式: 一方、関数式は、インタープリターがコードの特定の行に到達したときにロードされ、評価されます。 。これは、同じスコープ内で宣言の前にそれらを呼び出すことができないことを意味します。実行しようとするとエラーが発生します。

4.例の図

// Function Expression
alert(foo()); // ERROR!
var foo = function() { return 5; }; 

この例では、foo がまだ定義されていないため、alert(foo()) はエラーをスローします。

// Function Declaration
alert(foo()); // Alerts 5
function foo() { return 5; } 

ここでは、alert(foo()) がアラートを発行します5 は、コードが実行される前に関数宣言がロードされるためです。

その他の考慮事項

while 関数式宣言はほとんどの場合同様に動作しますが、注意すべきニュアンスがいくつかあります:

  • 名前付き関数式: 名前付き関数式 (例: var foo = function foo() { return 5; }) はかつて Safari で問題がありましたが、最新のバージョンでは問題なく処理されます。

以上がJavaScript の関数宣言と式の主な違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。