为什么必须在文件底部声明模块的导出?

时间:2014-05-21 19:06:07

标签: node.js hoisting

我有以下编辑代码:

module.exports = {
  read: read,
  write: write,
};

var read = function(parameters, config, next) {
  /* <snip> */
};

var write = function(parameters, config, next) {
  /* <snip> */
};

如果我在其他地方转到require()此文件,它将崩溃节点并说所需对象没有方法readwrite。变量提升不会拉动modules.export = { ... };以上的函数吗?

1 个答案:

答案 0 :(得分:15)

这是用于声明由function hoisting引起的重要函数的语法。如果你声明这样的函数,它们将在范围内“悬挂”,一切都很好。

module.exports = {
  read: read,
  write: write,
};

function read(parameters, config, next) {
  /* <snip> */
};

function write(parameters, config, next) {
  /* <snip> */
};

附注:我的代码段中的命名函数与分配给代码中的变量的匿名函数相反,更容易调试和分析,因为它们的名称包含在堆栈跟踪中。