Javascript全局变量值丢失
我遇到了一个关于全局变量的问题,当我遇到这段代码时:Javascript全局变量值丢失,javascript,variables,global-variables,Javascript,Variables,Global Variables,我遇到了一个关于全局变量的问题,当我遇到这段代码时: if(done === true){ console.log(songList); } done和songList的值现在已经不存在了,但是如果我在assign done=true之后立即使用console.log输出它们,那么它们将携带期望值songList将在eval语句运行的函数中建立。有人能解释为什么会这样吗 var song = {name:"", price:"", artist:"", image:""}; var d
if(done === true){
console.log(songList);
}
done和songList的值现在已经不存在了,但是如果我在assign done=true之后立即使用console.log输出它们,那么它们将携带期望值songList将在eval语句运行的函数中建立。有人能解释为什么会这样吗
var song = {name:"", price:"", artist:"", image:""};
var done = false;
var songList = [];
function runJSON(network,searchType){
var URL = returnURL(network,searchType,$('#song_field').val().split(' ').join("+"));
$.getJSON(URL, function(data){
if(document.getElementById("box") !== "undefined"){
clearScreen();
createCols();
}
eval(network + "(data);");
done = true;
});
if(done === true){
console.log(songList);
}
}
done=true在$getJSON的回调中被赋值。因此,它将在您测试ifdone==true之后实际运行
有关$.getJSON的更多信息,请注意“success”是一个回调
如果您这样做了:
function runJSON(network,searchType){
var URL = returnURL(network,searchType,$('#song_field').val().split(' ').join("+"));
$.getJSON(URL, function(data){
if(document.getElementById("box") !== "undefined"){
clearScreen();
createCols();
}
eval(network + "(data);");
done = true;
if(done === true){
console.log(songList);
}
});
}
然后您会看到歌曲列表是的,这是由$.getJSON是一个异步函数这一事实解释的。您所说的丢失是指它保留了值false还是变得未定义?因为log函数在被getJSON回调更改之前会显示它的值,因为它是异步的…啊,我明白了,所以变量will仍然=true只是此时还没有运行。谢谢