繁体   English   中英

按顺序运行Javascript函数(一个接一个)

[英]Running Javascript functions in order (one after the other)

当我尝试以下内容时:

if(myFunction() == "3") {
    alert('its three!');
}

我的函数返回undefined,当我知道它实际上是返回3.这是因为javascript在函数返回值之前计算if语句吗?

如果是这样我怎么能做这样的事情:

var result = myFunction();

// Wait until result is there

if(result == "3") {
    alert("its three!");
}

要解决您的问题,请尝试使用函数的返回值作为参数调用“alert”函数:

var result = myFunction();

// For debugging
alert(result);

if(result == "3") {
    alert("its three!");
}

如果警告框的内容是“未定义”,则您的函数实际上并不返回值,只是将该不存在的结果分配给变量将无济于事。 检查以确保myFunction看起来像:

function myFunction() {
    // Perform calculations
    var n = 10 - 7;

    // Return result    
    return n;
}

JavaScript解释器既不需要函数也不返回值,也不需要返回语句。 这意味着你应该仔细检查是否确实存在一个return语句。 如果您首先将结果分配给变量,那么这可能是您错过该return语句的一种方式。

如果您正在处理Ajax请求jQuery“模式对话框”或类似的结构,则函数甚至不可能以这种方式返回值(当单击按钮或请求完成时,即)。 要解决此问题,您的函数需要接受回调函数作为参数。 然后完成后,它必须调用该函数,并将“返回值”作为参数传递:

function myFunction(callback) {
    // Start an AJAX request        
    var x = new XMLHttpRequest();
    x.open('GET', '/domath.php?expression=10-7', true);
    x.onreadystatechange = function() {
        if(x.readyState == 4 && x.status == 200) {
            // Call callback function, "returning" a value asynchronously
            callback(x.responseText);
        }
    };
    x.send();
}

然后你的主要代码是:

myFunction(function(result) {
    // For debugging
    alert(result);

    if(result == "3") {
        alert("its three!");
    }
});

关于你在描述中做了什么,我有点不清楚。 试试看看你想要的是什么:

function MyFunction(){
    var result
    // Do something here

    //dummy:
    result = 3;
    return result;
}

var Testing = MyFunction();
alert(Testing);
if (Testing == 3) {
    alert("Holy Cow!  Its 3!");
}

听起来是你的javascript代码在函数或它访问的元素之前调用函数(即DOM中的某些东西)已经完全加载,这就是函数调用返回undefined而不是'3'的原因。

防止这种情况的方法是推迟调用函数,直到DOM完成加载。

这通常通过在document.onload()方法中调用函数来完成,该方法仅在页面加载完成时运行,或者使用jQuery的$.ready()方法,该方法再次等待页面准备好跑。

希望有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM