2017-06-06 50 views
-1

为什么我不能调用我在函数内定义的变量?这是我的代码...JavaScript:变量不能在函数外工作?

var username; 
    var rank; 
    var steamid; 
    var avatar; 

    var xhr = new XMLHttpRequest(); 

    xhr.onreadystatechange = function() { 
    if (this.readyState == 4 && this.status == 200) { 

     if (this.responseText == "null") { 
     } else { 
      var infoArr = JSON.parse(this.responseText); 
      var username = infoArr.username; 
      var rank = infoArr.rank; 
      var steamid = infoArr.steamid; 
      var avatar = infoArr.avatar; 
      testIt(); 
     } 
    } 
}; 

xhr.open("GET", "../getInfo.php", true); 
xhr.send(); 

function testIt() { 
    alert(username); 
} 

函数调用testIt()将返回:未定义

什么我的代码确实是让从JSON编码的页面信息,使变量。

+1

在你的回调函数中,你使用'var'将这些变量的范围设置为local。在回调函数中从用户名,等级,蒸汽,头像前删除var。 – James

+2

我的意思是......当然不起作用。 'testIt'无法访问该变量。你应该将它传递给'testIt'或者只是移除'testIt'并将该逻辑移入回调。不要移动到全局变量通过删除'var' ... –

+0

感谢您的回答。现在解决:D – Gogle

回答

0

如果你想使用函数外的变量,它们需要在函数外部定义。

var username, rank, steamid, avatar, infoArr, username, rank, steamid, avatar; 

    var xhr = new XMLHttpRequest(); 

    xhr.onreadystatechange = function() { 
    if (this.readyState == 4 && this.status == 200) { 

     if (this.responseText == "null") { 
     } else { 
      infoArr = JSON.parse(this.responseText); 
      username = infoArr.username; 
      rank = infoArr.rank; 
      steamid = infoArr.steamid; 
      avatar = infoArr.avatar; 
      testIt(); 
     } 
    } 
}; 

xhr.open("GET", "../getInfo.php", true); 
xhr.send(); 

function testIt() { 
    alert(username); 
}