0

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

module.exports = Person;

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

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

4

1 回答 1

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这是定义函数的这两种方法之间的主要区别之一(函数实际可用的时间)。

于 2014-02-21T23:18:58.747 回答