2013-10-08 71 views
0

我在使用下面的javascript函数时遇到的问题是,它将大多数流行的字符串值作为“不是程序员”返回,因此尽管它正在执行正确的操作,而我的console.log命令被放置,它将返回最流行的变量没有被修改。如果我正在修改顶部的变量,为什么不返回修改......它几乎就像JavaScript创建一个实例,它只能在测试函数的本地设置中工作(如果我将它放在console.log语句中,它会打印出来正确的数据)。为什么是这样 ?为什么JavaScript不能修改我的变量?

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; 
+0

你不想'I <长度 - 1'为您的循环;你只想'我<长度' – naomik

+3

'chrome.history.search'是异步的 – Prinzhorn

+0

你需要了解Javascript的回调函数 –

回答

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; 
相关问题