为什么javascript没有修改我的变量?

时间:2013-10-08 16:46:18

标签: javascript

我使用以下javascript函数的问题是,它返回的字符串值为mostpopular,因为“不是程序员”,所以虽然它正在执行我的console.log命令所在的正确操作,但它返回最流行尚未修改的变量。如果我修改顶部的变量为什么不返回修改...它几乎像javascript生成一个实例,它只适用于测试函数的本地设置(如果我放置console.log语句,它打印出来正确的数据)。这是为什么?

var mostPopular = "not a programmer";
var totalResults = 0;


function myfunction() {
    var listOfLanguages = ["Java", "C", "C++", "PHP", "C#", "Visual Basic", "Python", "Objective-C", "Perl", "Javascript", "Ruby"];



    for (var i = 0; i < listOfLanguages.length - 1; i++) {
        chrome.history.search({
            text: listOfLanguages[i],
            maxResults: 100
        }, function (search_results) {

            var countOfResults = search_results.length;
            var langOfResults = listOfLanguages[i - 1];

            test(countOfResults, langOfResults);

        });

    }

    console.log(mostPopular);
}

function test(count, lang) {


    if (count > totalResults) {

        totalResults = count;
        mostPopular = lang;
    }

}

window.onload = myfunction;

1 个答案:

答案 0 :(得分:2)

如上所述,历史搜索是异步的,因此在完成时需要执行回调

它的工作原理如下:

var mostPopular = "not a programmer";
var totalResults = 0;


function myfunction() {
    var listOfLanguages = ["Java", "C", "C++", "PHP", "C#", "Visual Basic", "Python", "Objective-C", "Perl", "Javascript", "Ruby"];



    for (var i = 0; i < listOfLanguages.length - 1; i++) {
        chrome.history.search({
            text: listOfLanguages[i],
            maxResults: 100
        }, function (search_results) {

            var countOfResults = search_results.length;
            var langOfResults = listOfLanguages[i - 1];

            test(countOfResults, langOfResults);
            console.log(mostPopular);
            // The Code will execute whenever the history search results are returned
        });

    }
// Any code here will be exceuted irrespective of the history search completed or not

}

function test(count, lang) {


    if (count > totalResults) {

        totalResults = count;
        mostPopular = lang;
    }

}

window.onload = myfunction;