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 に答える