7

Angular などのフレームワークで自己実行関数を使用する利点は何ですか?

私はAngularを初めて使用しますが、これまでの私の理解では、モジュールベースの設計により、自己実行機能が提供するほとんどの利点が得られるということです。私は何が欠けていますか?スタイルだけの問題ですか?

これは Ben Nadel による例です。私はこのスタイルが本当に好きですが、Angular コードをこのように書くことで何かメリットがあるのか​​、それともほとんどがスタイルの選択なのかを理解したいと思っています。

4

3 に答える 3

7

主に、コードがグローバルスコープで宣言されていないこと、および宣言した変数が関数内のスコープのままであることを保証します。

この場合、コードを実行するために必要なオブジェクトを 1 か所で宣言できるという利点もあります。angular一番下を見ると、 andDemoオブジェクトが渡されていることがはっきりとわかります。コードが関数にラップされていない場合は、コードをスキャンして依存関係を確認する必要があります。

個人的には、このパターンに従うことを効果的に強制するRequireJSのようなモジュール ローダーを使用することを好みます。

于 2013-09-12T02:00:28.313 に答える
2

それは一種の意見の質問です。自己実行関数の主な利点は、グローバル変数を作成しないことです。このパターンを angular で見たことがありません。

あなたが与えたリンクの例では、何の利点もないようです。とにかく角度変数は角度アプリケーションに存在するため、角度を直接使用できます。また、デモはモジュールであるため、グローバルスコープをいじることなく、コントローラーを追加できます。

私は多くの自己実行機能が好きです。しかし、この場合、私は本当に利点がわかりません。

于 2013-09-12T01:57:50.027 に答える
2

ダニエル、あなたは言った:「それが主にスタイルの選択である場合」 . 「コードスタイル」が好みの問題であるだけでなく、異なる結果を引き起こす場合、JavaScriptで少なくとも2つの例を知っています。

セミコロンはオプションですか? 全くない。

$scope.test = function() {
    console.log('Weird behaviour!')
} //; let us comment it

(function() {} ()); //two functions seem to be independent

に等しい

$scope.test = function() {
    console.log('Weird behaviour!')
}(function() {} ()); //but without semicolon they become the one

自己実行機能に関連しない「コード スタイル」の別の例:

var x = (function() {
   return  //returns undefined
   {};
}());

alert(x);

/*
that is why, I suppose, while writing javascript code,
we put function brackets in the following "code style":

function() { //at the same line
   return { //at the same line, this style will not lose the object
   };
}
*/

コード スタイルの形成は、この種の予期しない結果によって決まります。

最後だが大事なことは。selfexecuting関数を使用する場合:関数呼び出し時にクロージャーが作成され、vars がローカルに保持されます。

関数呼び出しでクロージャが作成されます。そのため、自己実行機能は非常に便利です。ダニエルが正しく述べたように、独立したコード単位を保持するのに適した場所であり、このパターンはモジュール パターンと呼ばれます。したがって、純粋な JavaScript から特定のフレームワークに、またはその逆に移行する場合、この独立性により、コードの変更がより流動的になります。最良のケースは、モジュールを angular ラッパーに移動して再利用することです。

そのため、あるテクノロジーから別のテクノロジーへのコード送信の目的には便利です。しかし、私が信じているように、特定のフレームワークでは意味がありません。

于 2015-11-11T20:35:29.023 に答える