簡體   English   中英

JavaScript返回錯誤后執行代碼

[英]JavaScript executing code after a false return

我正在使用一個函數來檢查是否填寫了必填字段。 我有這兩個功能,應該做同樣的事情,但第一個沒有。 在遇到退貨后,javascript不應該停止執行代碼嗎?

此函數返回true:

//Checks if various stages are ready
function trnReady(area) {
    switch (area)
    {
        case 'settings':
            $('input.required').each(function(){

                if($(this).val() == '')
                {
                    return false;
                }
            }); 
        break;
    }
    return true;
}

雖然這個返回false:

//Checks if various stages are ready
function trnReady(area) {
    var r = true;
    switch (area)
    {
        case 'settings':
            $('input.required').each(function(){

                if($(this).val() == '')
                {
                    r = false;
                }
            }); 
        break;
    }
    return r;
}

我以為第一次返回會停止執行代碼? 我想知道它是否與范圍有關?

在第一個代碼片段中return false; 只停止執行傳遞給jquery 每個方法的內部函數。 它還相應於jquery API停止jquery迭代。 但無論如何,trnReady都會返回true。

第二個代碼段是正確的,但您可以優化它,替換r = false; return r = false; (當你已經知道其中一個字段未填滿時,它會停止jquery的迭代)

在第一個片段中, return應用於作為each參數的函數。 return不適用於trnReady函數。 因此, return false是針對each的匿名函數。

在第二個片段中, return正確return trnReady函數,因此它可以正常工作。

這些函數中的每一個都包含嵌套在其中的第二個函數,它是嵌套函數內部的返回,您希望它們生效 - 但它們不會生效。 您無法從內部函數返回外部函數的調用者。 您可以做的最好的事情是在內部函數中設置一個變量,然后從外部函數返回該變量的值,如第二個示例所示。

在第一個示例中,您的函數返回false但僅在當前case語句的范圍內。 你的false有任何影響,任何行動發生時都不會被調用。

編輯:返回false僅在您傳遞給.each匿名函數內.each

jQuery每個都是一個迭代器,它將每個對象傳遞給你定義的函數。

當定義的函數返回true時,迭代繼續(到下一個對象)l當函數返回false時,迭代停止。

但只有迭代才會停止

代碼命中break ,但在這種情況下沒有其他return語句要執行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM