假设我按如下方式设置test2.js
module.exports.doPrint = doPrint;
var dummy = "initial";
function doPrint(callback) {
setInterval(function() {
console.log(dummy);
callback();
}, 1000);
}
然后我有test1.js
var test2 = require("./test2");
test2.doPrint(function() {
console.log("changing");
test2.dummy = "new value";
});
当我运行test1.js时,我得到以下内容
initial
changing
initial
changing
换句话说,test2.js中dummy的值永远不会更改为新值。有人能解释一下这里发生了什么吗?
答案 0 :(得分:2)
它不会更改值,因为dummy
是一个局部变量(无法从外部访问 - module本地的变量将是私有的)。要使其有效,您可以将test2.js
更改为:
module.exports.doPrint = doPrint;
function doPrint(callback) {
var that=this;
this.dummy = "initial";
setInterval(function() {
console.log(that.dummy);
callback();
}, 1000);
}
<小时/> 或使用:
module.exports.doPrint = doPrint;
module.exports.get = get;
module.exports.set = set;
var dummy = "initial";
function get(){
return dummy
}
function set(new_value){
dummy=new_value;
}
function doPrint(callback) {
setInterval(function() {
console.log(dummy);
callback();
}, 1000);
}
和test2.set("new value");
更改值,如果您希望它是局部变量。