2016-05-31 28 views
0

異なる機能を持つ異なるモジュールを作成することで、プロジェクトを少し整理しようとしました。しかし、私の "app.js"ファイルで変数を更新するには、これらの関数が有効である必要があります。モジュール内の関数からグローバル変数を更新

「custom_module.js」ファイルにある「myFunction」を実行するとすぐ下のコードは、変数「name」を更新してログに記録する必要があります。 しかし、私が得ることである:

こんにちは

app.js

var name; 
var module = require('./custom_module.js'); 
module.myFunction(); 
console.log("Hello " + name); 

custom_module.js

var myFunction = function(){ 
    name = "Test" 
} 

module.exports.myFunction = myFunction; 

を未定義の誰もがこの問題を解決する方法を知っていますか?

+1

あまりにも遅くなる前に、あなたのアーキテクチャをよく考え直してください。共有される可変状態はすべての悪の根です。 –

答えて

2

ような何かあなたはそれがノードでglobalとブラウザでwindowだ...グローバルオブジェクトにアタッチすることができます。

// app.js 
window.name = 'Foo'; 

// custom_module.js 
var myFunction = function(){ 
    window.name = "Bar"; 
} 

P.これをしないでください。共有グローバル変数は(通常)常に悪いです。

+0

何百と何百ものコード行を持つファイルを望んでいないので、私はグローバル変数を使うべきではないと言いますと...何かガイドがありますか?私は私のアプリを複数のファイルに分割する方法を教えてくれますか? –

+1

あなたはすでにモジュールでそれをやっています。あなたの小さなモジュラーコンポーネントはプロパティを持つことができます。 –

1

現在のところ、nameのスコープは、定義したとおりに関数内にしかありません。スコープを外に移動する必要があります。

app.js

var module = require('./custom_module.js'); 
var name = module.myFunction(); 
console.log("Hello " + name); 

custom_module.js

var myFunction = function(){ 
    return "Test"; 
} 

module.exports.myFunction = myFunction; 
関連する問題