14

我有以下经过编辑的代码:

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

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

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

如果我在别处转到require()这个文件,它会崩溃节点并说所需的对象没有方法readwrite. 变量提升不会拉动上面的功能modules.export = { ... };吗?

4

1 回答 1

20

这是您用来声明因函数提升而重要的函数的语法。如果您像这样声明这些函数,它们将在范围内“提升”,一切都很好。

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

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

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

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

于 2014-05-21T19:22:51.473 回答