外部作用域中的变量不更新。请帮助我理解为什么

时间:2019-04-30 08:09:36

标签: javascript variables asynchronous callback scope

当尝试从回调函数更新searchMonsterData()中的

变量时,它们不会更新。

我已经阅读了数小时的有关回调,作用域和闭包以及许多其他内容的信息,但我无法列出为解决该问题而试图解决的问题

function getData(url, cb) { 
    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function() {        
        if (this.readyState == 4 && this.status == 200) {
            cb(JSON.parse(this.responseText));
        }
    };

    xhr.open("GET", url);
    xhr.send();   
}

function searchMonsterData(url) {
    var searchTerm = document.getElementById("monsterName").value;
    var monsterData;
    var result;
    var monsterURL;   

    getData(url, function(data) {

        monsterData = data.results;

        for (i in monsterData) {
            if(monsterData[i].name == searchTerm) {
                result = monsterData[i];
                monsterURL = result.url;
                console.log(monsterURL);
            } 

        }

    })
}

代码运行时,应将monsterURL登录到控制台并更新searchMonsterData()中的变量,以便我可以在getData之外使用它们。

当代码运行searchMonsterData()中的变量时,不会更新。

0 个答案:

没有答案