JavaScript の関数呼び出し構文: ニュアンスの探索
JavaScript では、関数を呼び出すための構文が異なる場合があり、関数の機能に関する疑問が生じます。等価。次の 2 つのコード ブロックについて考えてみましょう:
(function() { bar = 'bar'; alert('foo'); })(); alert(bar);
(function() { bar = 'bar'; alert('foo'); }()); alert(bar);
両方のコード ブロックが "foo" を正常に警告し、次に "bar" を警告します。唯一の顕著な違いは、})() と }()) の使用のようです。最後に。では、これら 2 つのアプローチの間に機能的な違いはありますか?
同一の機能
この特定のシナリオでは、2 つの構文間に機能的な違いは存在しません。どちらの形式でも、無名関数内のコードを実行し、値 'bar' を変数 bar に割り当て、意図したとおりに警告メッセージを表示します。したがって、これらは機能的に同等です。
相違が生じた場合
ただし、2 つの構文が異なる結果を生み出す状況があります。次の変更を検討してください。
new (function() { this.prop = 4; })().prop;
new ( function() { return { Class: function() { } }; }() ).Class;
最初のコード ブロックでは、new を使用してクラスの新しいインスタンスを作成し、そのインスタンスの prop プロパティにアクセスします。これは値 4 を返します。
対照的に、2 番目のコード ブロックは、関数によって返されたオブジェクトの Class プロパティに対して new を呼び出します。関数呼び出しを囲む括弧は外側の括弧内にあるため、new をトリガーせず、関数を通常どおり実行します。したがって、代わりに Class プロパティがインスタンス化されます。
結論
ほとんどの場合、})() および }());機能に影響を与えることなく、関数を呼び出すために交換可能です。ただし、括弧の前に new が使用されたり、括弧の後に演算が実行されたりすると、構文がコードの動作に影響を与える可能性があります。意図したとおりに機能する JavaScript コードを作成するには、これらの微妙な違いを認識することが重要です。
以上がJavaScript の `})()` と `}());` の間に機能的な違いはありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。