引用我尚未在Node模块中定义的函数

时间:2014-02-21 23:14:13

标签: node.js node-modules

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

module.exports = Person;

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

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

1 个答案:

答案 0 :(得分:1)

在执行任何操作之前,会先解析整个JS文件。因此,函数Person()存在于实际执行行module.exports = 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;
};

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