ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScript で括弧を使用するとカプセル化された匿名関数が作成されるのはなぜですか?

JavaScript で括弧を使用するとカプセル化された匿名関数が作成されるのはなぜですか?

Mary-Kate Olsen
リリース: 2024-12-16 10:41:11
オリジナル
370 人が閲覧しました

Why Do Parentheses Create Encapsulated Anonymous Functions in JavaScript?

カプセル化された匿名関数の構文

JavaScript では、カプセル化された匿名関数は、関数を括弧で囲んですぐに実行することによって作成されます。

(function(){
    // code here
})();
ログイン後にコピー

この構文は、変数と関数を含むグローバル スコープ。

これが機能する理由: (function(){})();

関数宣言を括弧で囲むと、結果が評価されます。関数式として。関数式ではオプションの名前を使用できるため、この式は名前なしで実行できます。

これが機能しない理由: function(){}();

On一方、括弧がない場合、JavaScript はそれを関数宣言として解析します。関数宣言には名前識別子が必要ですが、この場合は名前識別子がありません。

関数宣言と式

  • 関数宣言: 関数識別子(パラメータ) { . .. }
  • 関数式: (関数識別子(パラメータ) { ... })

関数式には名前を付けることも名前を付けないこともできますが、関数宣言には名前を付ける必要があります。

括弧とコンテキスト

括弧は次のことを示します囲まれたコードが式であることを示します。それが関数宣言であるか式であるかは、コンテキストによって異なります。関数宣言はグローバル スコープ内または別の関数の本体内で使用できますが、関数式は式内でのみ使用できます。

曖昧さの例

0, function foo() {} // Function Expression
function foo() {} // Function Declaration
ログイン後にコピー

この例では、パーサーはコンテキストに基づいて、それが関数宣言であるか式であるかを判断します。式は式の中に使用できますが、宣言は特定の場所にのみ使用できます。

ブロック内の関数を避けるべき理由

ブロック内の関数は予期しない動作を引き起こす可能性があります変数のスコープの問題のため。例:

if (true) {
  function foo() {
    alert('true');
  }
} else {
  function foo() {
    alert('false!');
  }
}

foo(); // true? false? why?
ログイン後にコピー

以上がJavaScript で括弧を使用するとカプセル化された匿名関数が作成されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート