我不明白为什么只有对象被很好地导出。看看:
第一个文件
var a = exports.a = {};
var b = exports.b = 0;
exports.xxxxx = function(){
a.hello = 'help';
b = 104;
};
第二个文件
var a = require('firstfile').a;
var b = require('firstfile').b;
module.exports = function(){
console.log(a); // {hello:'help'}
console.log(b); // 0
};
为什么?
和出口b的解决方案是这样的:
第一个文件:
...
a.hello = 'help';
exports.b = 104; // (add exports)
...
第二档:
...
var b = require('firstfile');
...
console.log(b.b); // 104
为什么?
修改
我想我明白了。
变量a只是一个参考! 我会向不理解的人解释:
a = {}, b = 0
exports.b = 104
//我们改变了模块的值!谁是必需的。现在,为什么对象不同?
记住两件事很重要:
再见! 希望这有帮助!
答案 0 :(得分:1)
将0
分配给exports.b
时,它实际上被指定为常量值。您可以更新b
变量指向的值,但不会重新导出。
例如,我通过添加getB
函数修改了您发布的内容:
var a = exports.a = {};
var b = exports.b = 0;
exports.xxxxx = function(){
a.hello = 'help';
b = 104;
};
exports.getB = function() { return b; };
然后,您可以通过在REPL中使用此文件来了解我的意思:
> var example = require('./example.js');
undefined
> example
{ a: {},
b: 0,
xxxxx: [Function],
getB: [Function] }
> example.xxxxx()
undefined
> example.getB()
104
> example.b
0
>
编辑:您对引用的评论有点正确。当你最初说
时var b = exports.b = 0;
您说两个变量指向相同的值。这与指向同一引用的两个变量(一个对象,就像您使用a
所做的那样)不同。修改一个值时,不会修改另一个值。换句话说,当您将0的值更改为1时,您不希望代码中的每个0
实例都为1
。那不太好。
如果您希望b
成为值并在每次修改该值时更新,则应重新分配exports.b
。这就是为什么您会将大多数代码视为一个正在导出的对象的原因之一...然后,您的导出将被视为参考,并且您的所有b
都会按预期更新。