我遇到了一个关于全局变量的问题,因为当我遇到这个代码块时:
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的回调中被分配。因此,在测试if(done === true)
之后,它实际上会运行。
有关$.getJSON的更多信息,请点击此处http://api.jquery.com/jquery.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);
}
});
}
然后你会看到歌曲列表