module.exports与exports指向的是同一块内存区域,这个内存区域里存着一个结构体,有诸多变量。到底有啥区别?
app.js的代码不变,如下:
var rocker = require("./log"); console.log(rocker.name);
首先,让log.js的代码成下面这个样子:
exports.name = function() { console.log('My name is Lemmy Kilmister'); }; module.exports.name = 'ROCK IT!';
然后运行node app.js,结果是 ROCK IT!
如果把log.js的代码变成下面这个样子:
module.exports.name = 'ROCK IT!'; exports.name = function() { console.log('My name is Lemmy Kilmister'); };
然后运行node app.js,结果是[Function]。
这就很明显了,前后两次的name指向的同一个内存,相当于把name变量重新赋值两次。
如果把log.js的代码变成下面一个样子
module.exports = 'ROCK IT!'; exports.name = function() { console.log('My name is Lemmy Kilmister'); };
此时这个结构体里啥属性都没有,只有一个字符串——ROCK IT。所以它的结果是undefined