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或在浏览器中执行此操作。。