导出函数[nodejs]

时间:2015-01-28 08:28:58

标签: node.js

我想了解this code,但我在理解某些出口时遇到了问题。

导出函数是明确的,但如果您在createMonitor函数(导出)中查找示例,您将看到导出到watchTree调用。

exports.createMonitor = function (root, options, cb) {
   if (!cb) {cb = options; options = {}}
   var monitor = new events.EventEmitter();
   monitor.stop = exports.unwatchTree.bind(null, root);

   var prevFile = {file: null,action: null,stat: null};
   exports.watchTree(root, options, function (f, curr, prev) {}
   }

如果查看代码,函数的定义也会在上面导出。 我唯一可以想到的是,因为在这个函数里面有一些发射事件,它们被导出为模块发出事件,但我没有在文档中看到任何类似的东西。

任何见解?

2 个答案:

答案 0 :(得分:0)

watchTreeunwatchTree函数实际上是在同一模块中导出的。但由于它们不是独立的功能,因此无法直接引用它们。为了避免使用这种“导出引用”方案,您可以重写以下函数:

function watchTree(...) { /* function body */}

function unwatchTree(...) { /* function body */}

function createMonitor = function (root, options, cb) {
    if (!cb) {cb = options; options = {}}
    var monitor = new events.EventEmitter();
    monitor.stop = unwatchTree.bind(null, root);

    var prevFile = {file: null,action: null,stat: null};
    watchTree(root, options, function (f, curr, prev) {}

}

然后将它们分配给exports对象:

exports.watchTree = watchTree;

exports.unwatchTree = unwatchTree;

exports.createMonitor = createMonitor;

我认为这种情况更好,让你的代码更具可读性,所以没有人会对它的工作方式感到困惑,比如你:)

答案 1 :(得分:0)

这只是一个可读性问题,实际上没有任何内容在createMonitor函数中导出。

// bind the `unwatchTree` method to the `monitor.stop` property
monitor.stop = exports.unwatchTree.bind(null, root);
...
// invoke the `watchTree` method
exports.watchTree(root, options, function(f, curr, prev) {};

如果您查看createMonitor方法的上方,您会看到导出unwatchTree / watchTree,因此引用它们的唯一方法是通过exports对象。