Javascript全局变量值丢失

时间:2014-11-11 17:02:05

标签: 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 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);
    }
}

1 个答案:

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

然后你会看到歌曲列表