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

我有以下编辑代码:

module.exports = { read: read, write: write, }; var read = function(parameters, config, next) { /* <snip> */ }; var write = function(parameters, config, next) { /* <snip> */ }; 

如果我去其他地方require()这个文件,它会崩溃节点,并说所需的对象没有方法readwrite 。 将不会提升的function拉上modules.export = { ... };

这是您用来声明函数提升的函数的语法。 如果你这样宣布这些function,他们会在范围内被“吊起来”,一切都很好。

 module.exports = { read: read, write: write, }; function read(parameters, config, next) { /* <snip> */ }; function write(parameters, config, next) { /* <snip> */ }; 

附注:像我的代码段中的命名函数,而不是匿名函数分配给像你的片段中的variables,更容易debugging和configuration文件,因为他们的名字被包含在堆栈跟踪。