如果我使用以下代码定义模块:
module.exports = Person;
function Person (name) {
this.name = name;
};
为什么我需要这个文件,第一行不会返回ReferenceError,因为我还没有定义Person
?
答案 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
变量。这是定义函数的两种方法(函数实际可用的时间)之间的主要区别之一。