ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript の `})()` と `}());` の間に機能的な違いはありますか?

JavaScript の `})()` と `}());` の間に機能的な違いはありますか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-31 09:18:29254ブラウズ

Is There a Functional Difference Between `})()` and `}());` in JavaScript?

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 サイトの他の関連記事を参照してください。

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