节点模块。私有变量被重置

时间:2014-03-30 16:21:28

标签: javascript node.js

好像我的节点模块中的私有变量正在"重置"。例如。我在模块中有以下代码

var exec = require('child_process').exec;    

var process;

module.exports.start = function() {
    if (!process) {
        process = exec('Some process');
    }
};

module.exports.stop = function() {
    if (process) {
        process.kill();
    }
};

我遇到的问题是,如果我在process之后调用stop函数,则start变量未定义。

显然,对此的修复是定义一个对象/类并在模块中公开它。

但现在我很想知道模块在节点中是如何工作的。当模块为require时,所有私有变量会发生什么?

修改

我正在使用REPL中的这个模块进行测试,但一个示例用法就是

var my_module = require('./my_module');

// the child process starts fine
my_module.start();

// after some time

// but does not end
my_module.stop();

1 个答案:

答案 0 :(得分:1)

来自node.js文档:http://nodejs.org/api/modules.html

  

模块的本地变量将是私有的,就好像模块被包装在一个函数中一样。

因此,您的变量基本上只存在于模块所代表的clouse中。