JavaScript を使用するとき、多くの人はカプセル化された匿名関数の構文が興味深いと感じます。一方、構文 (function(){})(); function(){}(); を使用しようとするとシームレスに動作します。無駄であることがわかります。この矛盾を解明するには、JavaScript の構文と実行メカニズムをより深く理解する必要があります。
JavaScript の関数構文
JavaScript では、名前付き関数は次の構文に従います。
function functionName() { /* function body */ }
一方、匿名関数を使用すると、名前を割り当てずに関数を実行します。これらは変数に割り当てることができます:
var anonymousFunction = function() { /* function body */ };
匿名関数のカプセル化
匿名関数のカプセル化には、括弧で囲んですぐに実行することが含まれます:
(function() { /* function body */ })();
この手法はモジュール性を提供し、変数の回避に役立ちます
括弧の役割
提示された 2 つの構文の主な違いは、構文の解析方法にあります。括弧を使用しない場合、 function(){}();
対照的に、関数を括弧で囲むと、名前がなくても存在できる FunctionExpression としてマークされます。括弧は基本的に、括弧で囲まれた式を評価するグループ化演算子として機能します。
関数宣言と関数式
関数宣言と関数式には、異なる文法と動作があります。 foo() のような FunctionDeclarations には名前が必要で、グローバル スコープまたは他の関数本体内でのみ使用できます。(function () {}) のような
FunctionExpressions ではオプションの名前付けが可能で、式が予期される任意のコンテキスト。
結論
両方の形式の匿名関数構文は、コードのブロックをカプセル化するという同じ目的を達成します。括弧の有無によって、それぞれ FunctionDeclaration または FunctionExpression としての解釈が決まります。これらの概念とその構文上のニュアンスを理解すると、開発者は効果的で保守可能な JavaScript コードを作成できるようになります。
以上が`(function(){})();` は JavaScript で動作するのに、`function(){}();` は失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。