Javascript全局变量值丢失



我遇到了一个关于全局变量的问题,因为当我遇到这个代码块时:

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);
        }
    });
}

然后你会看到歌曲列表

相关内容

  • 没有找到相关文章

最新更新