--- main.js ---
var myModule = require('./module_a.js');
var value = 0;
myModule.set(35);
console.log("myModule.data:", myModule.data);
console.log("myModule.get():",myModule.get());
console.log(myModule);
--- module_a.js ---
exports.data = 10;
exports.set = function(value) {
data = value;
};
exports.get = function() {
return data;
};
我预计main.js
的结果是2 console.log()
中的每个结果为35。但是,结果是10个。
我不知道为什么会这样。从require
方法开始,变量myModule
是一个具有data
,函数set
,函数get
的对象。
因此,myModule.set(35)
必须将myModule
对象的数据更改为35.但是,它仍然是10.
如果我使用this.data = value
和return this.data
。它按我的预期工作。但不是在第一种情况下(我的上面的源代码)
为什么会这样?
答案 0 :(得分:3)
您的data
中没有本地module
变量。
尝试更改此行
exports.data = 10;
到
var data = 10;
exports.data = data;
答案 1 :(得分:1)
模块
exports.myObj = {
data: 10,
set: function (value) {
this.data = value;
},
get: function () {
return this.data;
}
}
主要
var myModule = require('./module_a.js').myObj;
var value = 0;
myModule.set(35);
console.log("myModule.data:", myModule.data);
console.log("myModule.get():",myModule.get());
console.log(myModule);
答案 2 :(得分:0)
当你执行这个赋值data = value;
时,javascript引擎会检查你是否在文件中定义了var,如果没有定义它,如果你在的话,它将在模块命名空间中定义var如果你在浏览器上,则在node.js和全局命名空间中,这在任何情况下都是非常糟糕的做法。
您在此处执行的作业exports.data = data;
它会在exports对象中创建一个额外的字段。您可以理解,在全局命名空间中定义的data
变量与在exports对象中定义的字段无关。