2017-02-01 11 views
0

私は比較的初心者のJS開発者で、ゆっくりと "ロープを学ぶ"です。セイルの設定とグローバルスコープ

最近、私はIIFEを使用してグローバルスコープの汚染を防ぐためのガイドラインを読んでいます。私はコンセプトは、customLogger /ウィンストンは、グローバルスコープに追加されていることを理解していれば

今すぐ帆構成システムを考慮すると、私は「自由浮動」コード、例えば:

// sails/config/log.js 
var Winston = require('winston'); 
var customLogger = new winston.Logger(); 
// configure logger 

module.exports = { 
    custom: customLogger, 
    level: 'info', 
} 

と例の多くを参照してください。

正しいですか?

私は私が何かをしたい場合、私は、構成ファイル内のいくつかのコードを「重要」書かなければならないと信じている - そしてこれらのケースでは、私は一般的ルールが適用されるべきであると仮定...

は、私はこれらの中で生命維持を使用すべき場所?例えば

// sails/config/log.js 
(function() { 
    var Winston = require('winston'); 
    var customLogger = new winston.Logger(); 
    // configure logger 

    module.exports = { 
     custom: customLogger, 
     level: 'info', 
    } 
}()); 

はこれですべての長所/短所がありますか?大切ですか?

答えて

2

これは良い質問です。

Node.jsとブラウザ/フロントエンドのJavaScriptグローバルスコープは同じように動作しません。

<script> 
 
\t var a = 'hello'; 
 
\t console.log('first script'); 
 
</script> 
 

 
<script> 
 
\t var b = 'world'; 
 
\t console.log(a, b); 
 
\t console.log(window.a, window.b); 
 
</script>

生命維持が「に対する保護:ブラウザ環境

は、あなたは別のスクリプトで宣言されたすべてのものが含まれています(windowとして知られている)グローバルスコープを持っていますグローバルな環境を汚染している」と述べています。

<script> 
 
\t (function() { 
 
\t \t var a = 'hello'; 
 
\t \t console.log('first script'); 
 
\t })(); 
 
</script> 
 

 
<script> 
 
\t (function() { 
 
\t \t console.log(a); // a is not defined 
 
\t })(); 
 
</script> 
 

 
<script> 
 
\t (function() { 
 
\t \t console.log(window.a); // undefined 
 
\t })(); 
 
</script>

あなたはModule patternを使用して、フロントエンドのコードを整理するために、この動作を利用することができます。 Node.jsの環境

、あなたは別のファイルにしたいものは何でも宣言することができますし、module.exportsを使って、それをしない限り、それは他人からアクセスできなくなります。あなたはIIFEsを使用する必要はありません(Node.jsのに実行されます)あなたの帆のプロジェクトでそう

// module-a.js 
var a = 'hello'; 
module.exports = a + ' world'; 

// index.js 
var moduleA = require('./module-a'); 
console.log(moduleA); // 'hello world' 
console.log(a); // a is not defined 
console.log(moduleA.a); // undefined 

をしてmodule.exportsある使用する必要があります。

たとえば、あなたがこれを行うことができます全く十分。

More on this

+0

明確な説明と例をありがとう...再実行するには、nodejでファイルの実行がそれ自身の「サンドボックス」またはスコープであり、module.exportsに添付されていないものは「ローカル」ですか? –

+0

まさに!ちなみに、 'global'キーワードで' local 'スコープにアクセスすることができます(例えば 'global.a'はmodule-a.jsファイルに' hello'を含みます) –

関連する問題