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

时间:2010-11-03 21:11:03

标签: javascript

当我尝试以下内容时:

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

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

如果是这样,我怎么能这样做:

var result = myFunction();

// Wait until result is there

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

3 个答案:

答案 0 :(得分:2)

要解决您的问题,请尝试使用函数的返回值作为参数调用“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语句。如果您首先将结果分配给变量,那么这可能是您错过该返回语句的一种方式。

如果您正在处理 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!");
    }
});

答案 1 :(得分:1)

关于你在描述中做了什么,我有点不清楚。试试看它是否符合您的要求:

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!");
}

答案 2 :(得分:1)

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

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

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

希望有所帮助。