Node.js 引用函数I haven';尚未在节点模块中定义

Node.js 引用函数I haven';尚未在节点模块中定义,node.js,node-modules,Node.js,Node Modules,如果我使用以下代码定义模块: module.exports = Person; function Person (name) { this.name = name; }; 为什么当我需要这个文件时,第一行没有返回ReferenceError,因为我还没有定义Person?在执行任何操作之前,首先解析整个JS文件。因此,在实际执行行module.exports=Person之前,解析步骤中存在函数Person() 所以,当你按照自己的方式做事时: // Person already e

如果我使用以下代码定义模块:

module.exports = Person;

function Person (name) {
    this.name = name;
};

为什么当我需要这个文件时,第一行没有返回ReferenceError,因为我还没有定义
Person

在执行任何操作之前,首先解析整个JS文件。因此,在实际执行行
module.exports=Person
之前,解析步骤中存在函数
Person()

所以,当你按照自己的方式做事时:

// Person already exists and is a function
module.exports = Person;

function Person (name) {
    this.name = name;
};
一切正常,因为在执行前的解析阶段提取了
Person()
的定义

但是,如果你这样做:

// Person exists, but has no value yet (will be undefined)
module.exports = Person;

var Person = function(name) {
    this.name = name;
};

它将不起作用,因为当执行
module.exports=Person
行时,
Person
变量尚未赋值。这是这两种定义函数的方法(函数实际可用的时间)之间的主要区别之一。

module.exports甚至没有什么特别之处,如果我用
console.log(Person)
替换第一行,它就可以正常工作了。。。绝对不能从repl或在浏览器中执行此操作。。