@phper
2015-03-02T15:00:56.000000Z
字数 743
阅读 3714
nodejs
被导入的模块文件,通过 exporets对象将方法导出。还存在一个module对象,exports是module的属性。所以有2种方式定义一个模块:
exports.add = {};
module.exports = add;
一个文件就是一个模块,每个模块文件就存在着require、exports、module这3个方法,不需要定义和导入就可以直接使用。原因是,node在编译的时候,在头部添加了(function (exports, require, module, __filename, __direname){\n}) ,形成闭包。
比如一个简单的模块文件。 math.js:
var math = require('math');
exports.area = function (radius) {
return Math.PI * radius * radius;
}
node 编译时,会变成这样:
(function (exports, require, module, __filename, __direname) {
var math = require('math');
exports.area = function (radius) {
return Math.PI * radius * radius;
}
})
每个文件都会是这样,所以,一些方法我们使用,但是变量和属性就不能直接调用了,形成一个闭包。