2016-05-31 92 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.S.不要這樣做。共享的全局變量(通常)總是邪惡的。

+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;