0

假设我设置 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 的值永远不会更改为新值。有人可以解释这里发生了什么吗?

4

1 回答 1

2

它不会更改值,因为dummy它是一个局部变量(不能从外部访问 -模块的本地变量将是私有的)。要使其工作,您可以更改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");更改该值,如果您希望它是一个局部变量。

于 2012-04-04T01:17:02.720 回答