2017-02-09 7 views
2

私は古いAngularJS 1.3プロジェクトをリファクタリングしています。私が気づいたことの一つは、これを作った人が持つAngularJSコードのすべての単一のファイルを開始したということです。"function()"を使用する利点はどのファイルでも厳密に使用できますか?

(function() { 
'use strict'; 

    angular.module('app').factory('Employees', ['$http', function($http) { 
    // angular code removed 
    }]); 

})(); 

コードにすべての単一のファイルに何らかの利益を機能()「厳格な使用」を使用していますか?私には、1ファイルごとに3行の無駄な感じがします。これには標準/ベストプラクティスがありますか?

+0

私は '厳格な使用' 知っているがありません。しかし、私はそれをグローバル化せずに一度だけuse strictを使用する方法を見つけたいと思います。 – Stefan1991

+0

も参照してください[なぜ、IIFE(スクリプトの先頭ではなく)の後に 'use strict'が使われるのはなぜですか?]](http://stackoverflow.com/questions/38670872/why-is-use-strict-usually-after – Bergi

+0

"* use onlyはグローバル化せずに一度strictを使用します*"はあなたのコードがしているとおり、*モジュールを作成します*厳密。 – Bergi

答えて

0

'use strict';をIIFEの外に置くと、グローバルになります。

これは、厳密に準拠していないコード(たとえば他のライブラリなど)が制御できないことが原因で問題が発生する可能性があることを意味します。ただ、変数のスコープのような

は、あなただけのuse strictを使用した唯一の生命維持

+0

しかし私は厳密なモードで実行されているときに窒息するライブラリには他の問題があると仮定します... – Bergi

0

の内側にそれをすべて置くことによって、あなたのコードのコンテキスト内で'use strict'をスコープしているあなたは、閉鎖や変数のスコープの問題を防ぐことができます。たとえばについては

、あなたがaccidentalyグローバル変数を設定している場合 - この場合にはforループでvarキーワードを追加し忘れにより、use strictモードはそれをキャッチし、サニタイズされます。

(function(){ 
 
    for (i = 0; i < 5; i++){ 
 
    } 
 
    console.log(i); 
 
})();
.as-console-wrapper { max-height: 100% !important; top: 0; }

(function(){ 
 
    'use strict'; 
 
    for (i = 0; i < 5; i++){ 
 
    } 
 
    console.log(i); 
 
})();
.as-console-wrapper { max-height: 100% !important; top: 0; }

関連する問題