[英]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.