如果我使用以下代码定义模块:
module.exports = Person;
function Person (name) {
this.name = name;
};
为什么当我需要这个文件时,第一行没有返回 ReferenceError,因为我还没有定义Person
?
如果我使用以下代码定义模块:
module.exports = Person;
function Person (name) {
this.name = name;
};
为什么当我需要这个文件时,第一行没有返回 ReferenceError,因为我还没有定义Person
?
在执行任何操作之前,首先解析整个 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
这是定义函数的这两种方法之间的主要区别之一(函数实际可用的时间)。