javascript函数返回不起作用

Sta*_*nni 6 javascript return function

我在函数中返回变量时遇到问题,下面的脚本运行正常:

function sessionStatus(){
    $(document).ready(function(){
        $.getJSON(scriptRoot+"sessionStatus.php",function(status){
            alert(status);
        });
    });
}

sessionStatus();
Run Code Online (Sandbox Code Playgroud)

在我尝试以下操作时打赌我会收到一个消息框,其中包含"未定义"消息:

function sessionStatus(){
    $(document).ready(function(){
        $.getJSON(scriptRoot+"sessionStatus.php",function(status){
            return status;
        });
    });
}
alert(sessionStatus());
Run Code Online (Sandbox Code Playgroud)

这真是让我烦恼,我似乎无法看出我做错了什么.

小智 12

你应该知道两件事:

1:JSON事物是异步的,因此在仍然获取JSON时,已经可以完成对sessionStatus的函数调用.以下将有效:

function sessionStatus(callback){
    $(document).ready(function(){
        $.getJSON(scriptRoot + "sessionStatus.php", function(status){
                callback(status);
        });
    });
}
sessionStatus(function(s){alert(s);});
Run Code Online (Sandbox Code Playgroud)

更确切地说:

function sessionStatus(callback){
    $(document).ready(function(){
        $.getJSON(scriptRoot + "sessionStatus.php", callback);
    });
}
sessionStatus(function(s){alert(s);});
Run Code Online (Sandbox Code Playgroud)

2:即使它是同步的,你只是从内部函数给出一个返回值,所以sessionStatus什么也不返回.看看这段代码(与你的JSON事物无关):

function do() {
    var x = 0;
    (function(){
       x = 2;
    })();
    return x;
}
Run Code Online (Sandbox Code Playgroud)

要么:

function do() {
    var x = (function(){
       return 2;
    })();
    return x;
}
Run Code Online (Sandbox Code Playgroud)

两者都返回2.希望这可以解释一下.