1

我在 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 在模块中设置变量没有任何效果,似乎需要在模块的方法中设置变量。谁能向我解释这是为什么?还是我编码错误?

提前致谢

4

1 回答 1

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
    };  
});

此外,作为风格问题,最好使用“普通”函数声明:

function ShowTesterString () {
    ...
}

而不是使用var ShowTesterString = function () { ... }, 就像在你的代码中一样。

于 2012-10-04T02:33:25.357 回答