簡體   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