ホームページ > 記事 > ウェブフロントエンド > 構文が異なる匿名関数は、修飾子と組み合わせると JavaScript で異なる動作をしますか?
JavaScript では、構文が異なる匿名関数は機能的に同等ですか?
JavaScript では、(function() { })() と ( function() { }()) は、「foo」と「bar」を連続して表示することで、同じタスクを実行しているように見えることがあります。ただし、特定の条件下では、これら 2 つの構文には微妙な違いがあります。
コード ブロック 1:
(function() { bar = 'bar'; alert('foo'); })(); alert(bar);
コード ブロック 2:
(function() { bar = 'bar'; alert('foo'); }()); alert(bar);
機能的に同等
変更がなければ、両方のコード ブロックは機能的に同等です。無名関数を作成し、すぐに実行し、関数内で定義された bar 変数にアクセスします。
変更との違い
ただし、次のような修飾子を導入すると、関数を呼び出す前に new として指定するか、関数の後に何かを追加すると、動作が変わります。
new と .prop を使用したコード ブロック 1:
new (function() { this.prop = 4; }) ().prop;
このコードは、匿名関数の新しいインスタンスを作成し、その prop プロパティにアクセスします。 4.
コード ブロック 2 with new および .Class:
new ( function() { return { Class: function() { } }; }() ).Class;
対照的に、このコードは Class プロパティで new を呼び出します。外側の括弧内に括弧が追加されているため、関数呼び出しは新しい式の一部ではありません。代わりに、通常どおり関数を呼び出し、その戻り値であるクラス インスタンスを返します。
要約すると、(function() { })() と (function() { }()) はどちらも機能的には通常の条件下では同等ですが、実行方法に影響を与える修飾子と組み合わせると動作が異なります。
以上が構文が異なる匿名関数は、修飾子と組み合わせると JavaScript で異なる動作をしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。