我在requireJS Define模块中设置变量时遇到问题,它没有生效。我有以下(缩减)示例来说明问题:
这是定义的模块:
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
似乎只是通过执行变量= blah在模块中设置变量不会产生任何影响,似乎需要在模块的方法中设置变量。任何人都可以向我解释为什么会这样吗?或者我编码错了什么?
提前致谢
答案 0 :(得分:2)
据我所知,不是非常熟悉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
};
});
另外,作为a matter of style,最好使用“普通”函数声明:
function ShowTesterString () {
...
}
比使用var ShowTesterString = function () { ... }
,而不是代码。