我不明白这个javascript函数是如何执行的

Chi*_*uzo 1 javascript jquery

当我运行以下代码时,警报弹出窗口显示未定义.我认为它会返回true或false.请有人解释checkLoginStatus()函数如何执行.谢谢.

function checkLoginStatus() {
$.get("func.php", {op:'login_status', r:Math.random()}, function(data) {
    if (data == "Yes") {
        showSalesView();
        return true;
    } else {
        loginView();
        return false;
    }   
});
Run Code Online (Sandbox Code Playgroud)

}

alert(checkLoginStatus());
Run Code Online (Sandbox Code Playgroud)

Rob*_*ert 7

有几件事是错的.

一,你在函数中执行异步调用,所以当调用返回时,checkLoginStatus已经返回.它基本上是这样的:

function checkLoginStatus() {
    $.get("func.php", {
        op: 'login_status',
        r: Math.random()
    }, function(data) {
        if (data == "Yes") {
            showSalesView();
            return true;
        } else {
            loginView();
            return false;
        }
    });
    // return undefined
}
Run Code Online (Sandbox Code Playgroud)

其次,您在另一个函数的回调中返回,因此返回会影响回调的返回值 $.get

你想使用回调.所以,

function checkLoginStatus(callback) {
    $.get("func.php", {
        op: 'login_status',
        r: Math.random()
    }, function(data) {
        if (data == "Yes") {
            showSalesView();
            callback(true);
        } else {
            loginView();
            callback(false);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

然后

checkLoginStatus(function(result) {
    alert(result);
});
Run Code Online (Sandbox Code Playgroud)