javascript变量范围问题未定义

时间:2013-07-25 21:43:21

标签: javascript global-variables scope

function getData() {
    var photo,
        comment,
        url;

    $.getJSON('http://url.info/verify/settings.php', function (data) {
        photo = data.photoMSG;
        comment = data.commentMSG;
        url = data.photoURL
    });
    console.log(photo); //undefined
    console.log(comment); //undefined
    console.log(url); //undefined
}

我在控制台日志中未定义所有这些...如何在getJOSN块之外看到这3个变量?我知道这已被问过x100次,我试过windiw.varName,但仍然是同样的事情。

2 个答案:

答案 0 :(得分:1)

这不是范围问题,而是异步问题。 getJSON处理程序中的所有内容都是异步的 - 因此console.log调用通常会在变量分配后发生。请改为使用异步回调:

$.getJSON('http://url.info/verify/settings.php', function (data) {
    photo = data.photoMSG;
    comment = data.commentMSG;
    url = data.photoURL;
    callback(photo, comment, url);
});
function(photo, comment, url) {
    console.log(photo); //undefined
    console.log(comment); //undefined
    console.log(url); //undefined
}

答案 1 :(得分:0)

因为$.getJSON正在进行ajax调用,但之后的代码在调用getJSON内的回调之前被调用。因此,变量仍未定义。异步行为的典型“问题”。