Javascript 来自外部的RequireJS设置模块变量无效

Javascript 来自外部的RequireJS设置模块变量无效,javascript,requirejs,js-amd,module-pattern,Javascript,Requirejs,Js Amd,Module Pattern,我在设置requireJS定义模块中的变量时遇到问题,它完全失效。我有以下(简化)示例来说明这个问题: 以下是定义的模块: define([], function () { var testerString = "BaseLine"; var ShowTesterString = function () { console.log(testerString); } var setTesterString = function (pTesterString) { testerS

我在设置requireJS定义模块中的变量时遇到问题,它完全失效。我有以下(简化)示例来说明这个问题:

以下是定义的模块:

define([], function () {
var testerString = "BaseLine";

var ShowTesterString = function () {
    console.log(testerString);
}

var setTesterString = function (pTesterString) {
    testerString = pTesterString;
}

return {
    testerString: testerString,
    ShowTesterString: ShowTesterString,
    setTesterString: setTesterString
};  
});
然后,我将“TesterModule”设置为另一个的依赖项,并运行以下代码行:

TesterModule.ShowTesterString();
TesterModule.testerString = "Change 1";
TesterModule.ShowTesterString();
TesterModule.setTesterString("Change in Setter");
TesterModule.ShowTesterString();
输出到控制台的是:

BaseLine 
BaseLine 
Change in Setter 
我本以为应该是:

BaseLine 
Change 1
Change in Setter 
似乎仅仅通过执行variable=blah在模块中设置变量不会产生任何效果,似乎需要在模块的方法中设置变量。有人能解释一下为什么会这样吗?或者我编码错了什么


提前感谢

据我所知,我对RequireJS不太熟悉,这是一个纯JavaScript问题。改变

console.log(testerString);
// to
console.log(this.testerString);
改变

testerString = pTesterString;
// to
this.testerString = pTesterString;
因此,您正在获取/设置匿名函数返回的对象中的值,而不是关闭
var testerString
变量。如果使用与返回的对象键不同的变量名,则当前代码中发生的情况可能会得到澄清:

define([], function () {
    var foo = "BaseLine";

    var ShowTesterString = function () {
        console.log(foo);
    }

    var setTesterString = function (pTesterString) {
        foo = pTesterString;
    }

    return {
        testerString: foo,
        ShowTesterString: ShowTesterString,
        setTesterString: setTesterString
    };  
});
同样,最好使用“正常”函数声明:

function ShowTesterString () {
    ...
}

而不是像在代码中一样使用
var ShowTesterString=function(){…}

嗨,马特,谢谢你的回复。我把define函数改成了你建议的布局,但没什么不同。所以我想知道这是否与RequireJS AMD风格的引擎盖下有关。还有其他想法吗?您将代码更改为使用
foo
?这只是一个说明为什么它不起作用,而不是解决问题的例子。解决方法是使用部分代码片段中的
this.testerString