Javascript 来自外部的RequireJS设置模块变量无效
我在设置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
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
。