当我点击这段代码时,我对全局变量有点问题:
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);
}
}
答案 0 :(得分:0)
done = true
在$ .getJSON的回调中被分配。因此,在测试if(done === true)
后,它实际上会运行。
更多关于$ .getJSON的信息http://api.jquery.com/jquery.getjson/ - 请注意'成功'是回调。
如果你这样做了:
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);
}
});
}
然后你会看到歌曲列表