javascript - 第二次引用时变量会丢失值

标签 javascript google-closure

我有一些 Ajax,它从数据库获取信息并将其存储在名为 targetVocab 的数组中。此信息用于在调用 setVocab() 时设置 vocab 的值。第一次可以正常工作,但是当再次点击播放按钮并第二次调用 setVocab 时,它就不起作用了。第二次出现 targetVocab 为空。这是我的简化脚本...

var targetVocab;
var vocab;
var request = new goog.net.XhrIo();

goog.events.listen(request, "complete", function(){

    if (request.isSuccess()) {
        response = request.getResponseJson();
        targetVocab = response['targetVocab'];
        setVocab(targetVocab);
    }

});

request.send("load_vocab.php");

var setVocab = function(targetVocab) {
    vocab = targetVocab;
}

var getVocab = function() {
    return vocab;
}


goog.events.listen(playAgainButton, ['mousedown', 'touchstart'], function(e) {
    getVocab();
});

更新: 我开始意识到,无论我对 vocab 做什么,都同样适用于 targetVocab。我最初的想法是,我可以在整个应用程序中拼接 vocab 中的元素,然后通过将其再次设置为 targetVocabvocab 重置为其原始状态。是否有某种方法可以将 vocab 设置为等于 targetVocab,而无需以这种方式保持两者的连接?

最佳答案

您需要以不同的方式定义函数 setVocab。

我刚刚意识到的第二件事:你应该编写 2 个函数,一个 set 函数和一个 GET 函数,这样就不会再拼接了。

例如

 function setVocab(targetVocab){
    vocab = targetVocab;       
}

这样可以确保您确实将 targetVocab 作为变量传递给它。 现在相应的 GET 函数:

 function getVocab(){
    return vocab;
}

或者将其放在一个(不推荐)

function setVocab(targetVocab){
    if(targetVocab!=""){
     vocab = targetVocab;
    }else{
     return vocab;
    }
}

现在取决于您实现的调用

goog.events.listen(playAgainButton, ['mousedown', 'touchstart'], function(e) {
getVocab();

});

或者如果您实现了“不推荐”代码,则使用此代码

goog.events.listen(playAgainButton, ['mousedown', 'touchstart'], function(e) {
setVocab("");

});

goog.events.listen(request, "complete", function(){

if (request.isSuccess()) {
    response = request.getResponseJson();
    targetVocab = response['targetVocab'];
    setVocab(targetVocab); //chaged here
}

});

关于javascript - 第二次引用时变量会丢失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17561059/

相关文章:

javascript - goog.inherits 使用临时构造函数有什么好处?

javascript - 使用 jquery 播放暂停嵌入式 vlc 播放器

javascript - 单元测试: Having trouble mocking a promise return to test my emit

javascript - 将用户 ID 添加到 PhoneGap 文件上传

javascript - 如何使用 Google Closure 编译器

java - 命令行 Google Closure 提供了哪些标准 extern,如何通过 Java 接口(interface)获取它们?

javascript - 获取所有数字的除数对,达到一定限制

javascript - 如何使用 .replace 删除字符串的一部分(如果该部分存在于数组中)?

javascript - 使用闭包编译器正确键入实例变量