私は現在、同じ変数を変更できるようにする必要がある 2 つのモジュールを呼び出すという問題に直面しています。
というグローバル変数を作成し、global.APP_NAME = {}
必要な変数をそこに格納することにしました。
しかし、グローバル変数を使用するのは悪い習慣であると読んでいます。それはなぜです?
私は 1 つの変数のみを作成しています。これはアプリケーションの名前であるため、他の変数と衝突することはありません。
私は現在、同じ変数を変更できるようにする必要がある 2 つのモジュールを呼び出すという問題に直面しています。
というグローバル変数を作成し、global.APP_NAME = {}
必要な変数をそこに格納することにしました。
しかし、グローバル変数を使用するのは悪い習慣であると読んでいます。それはなぜです?
私は 1 つの変数のみを作成しています。これはアプリケーションの名前であるため、他の変数と衝突することはありません。
グローバル変数は、コードの追跡とデバッグを非常に困難にするため、ほとんどすべてのプログラミング言語でアンチパターンと見なされます。
データを共有する 2 つのモジュールがある場合、そのデータを使用してオブジェクトを作成し、それを必要とする各関数 (および実際に必要な関数のみ) に明示的に渡す必要があります。
ほとんどのコメントと他の回答から、なぜグローバルと見なされる悪い慣行があるのか を読むことができます。ただし、node.js アプリは通常、「app.js」、「server.js」などの中心点から実行されます。
その場合、そのファイルの構成オプションとして、ある種の「構成」(APP_NAME.usersが必要だと言いました)を保持できます。したがって、「app.js」には次のものがあります。
var config = {
myVar: 100
}
一部のモジュールでこの変数にアクセスする必要がある場合は、パラメーターとして渡します。すなわち。グローバルファイルでは、次のように呼び出します。
var module = require('./lib/myModule.js').init(config);
これで、モジュールの init 関数をエクスポートして、config の独自のローカル コピーを設定できるようになりました。例:
var localConfig = null;
exports.init = function(config) {
// merge the two config objects here
localConfig.myVar = config.myVar;
}
最後に、プライベート値を使用して、ローカル コードをグローバル オブジェクトに影響を与えることができます。モジュールで次のようなもの:
exports.modifyGlobalConfig = function() {
global.myVar = myLocalValue;
}
グローバル app.js は、そのメソッドを使用してそのグローバル値を変更します。