2

私は先月JavaScriptプログラミングを始めました。オブジェクト、関数、クラス、文字列、配列、プロパティなどの基本的な構文を知っています。今、私は与えられた構文に戸惑いました。

構文:

(function(){

 "use strict";

})();

私の質問は、なぜ2つの括弧(1つは「関数」を含み、もう1つは「空」を含む)が定義に含まれるのかということです。なぜ私たちがこれを使うのか誰かが私を助けることができますか?

4

4 に答える 4

2

これにより、無名関数が作成され、すぐに実行されます。

この場合、その関数には1行しかありません"use strict"

于 2013-02-07T23:31:31.880 に答える
2

そのコードは世界に正味の影響を与えません。何が起こるか:

  • 括弧で囲まれた関数がインスタンス化されます。
  • ()その関数が呼び出される最後の原因。
  • 「usestrict」定数は「strict」モードをオンにします。
  • 関数が戻ります。
于 2013-02-07T23:31:46.373 に答える
1

これは、自己呼び出し無名関数(または即時呼び出し関数式、IIFEとも呼ばれます)であり、この場合、閉じたスコープを生成するためだけに存在するパターンです。

"use strict";どうやら、彼らはファイル全体に対して厳密モードをオンにしたり、他のファイルに縮小して連結したり、含まれているライブラリで厳密モードをオンにしたりすることを望んでいません。Amazonはしばらく前にこれに問題を抱えていました。それ以来、"use strict"関数スコープを維持することがベストプラクティスとして推奨されており、この関数はその目的のためだけに存在します。

于 2013-02-07T23:31:55.003 に答える
1

あなたが持っているのは自己呼び出し機能です。

それはまさにそれであり、すぐに呼び出される関数です。これを実現するには、関数宣言ではなく、関数が必要です。それを達成するために、特定のことを行うことができます。その1つは、式全体を括弧で囲むことです。

(function() {});

このステートメントは、関数式を作成します。これで、あとは、他の関数の場合と同じように、関数の括弧を追加してその関数を呼び出すだけです。

(function() {})();

ステートメント全体に関数の括弧を入れることもできますが、違いはありません

(function() {}());

関数式の形式にするもう1つのオプションは、関数を使用する!か、関数の+前に署名することです。

!function(){}()

式を作成している限り、そのような関数宣言を呼び出すことはできません。

function foo(){}() // syntax error
于 2013-02-07T23:34:50.053 に答える