Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript全局变量值丢失_Javascript_Variables_Global Variables - Fatal编程技术网

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只是此时还没有运行。谢谢