JavaScript在错误返回后执行代码
我正在使用一个函数检查必填字段是否已填充。我有这两个函数,它们应该做同样的事情,但是第一个没有。javascript不应该在遇到返回后停止执行代码吗 此函数返回true:JavaScript在错误返回后执行代码,javascript,Javascript,我正在使用一个函数检查必填字段是否已填充。我有这两个函数,它们应该做同样的事情,但是第一个没有。javascript不应该在遇到返回后停止执行代码吗 此函数返回true: //Checks if various stages are ready function trnReady(area) { switch (area) { case 'settings': $('input.required').each(function(){
//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;
}
我以为第一次返回会停止执行代码?我想知道它是否与作用域有关?这些函数中的每一个都包含嵌套在其内部的第二个函数,而您期望的是嵌套函数中的返回值会生效,但它们不会生效。不能从内部函数返回外部函数的调用方。最好在内部函数中设置一个变量,然后从外部函数返回该变量的值,就像第二个示例一样。在第一个示例中,函数返回
false
,但仅在当前case语句的范围内。您的false
具有任何效果,任何操作在发生时都不会被调用
编辑:
Return false仅在传递给
的匿名函数中有效。每个在第一个代码段中,返回值应用于作为每个参数的函数。返回
不适用于trnReady
功能。因此,返回false
用于中的匿名函数
在第二个代码段中,return
正确地表示trnReady
函数的return
,因此它工作正常。是一个迭代器,它将每个对象传递给您定义的函数
当定义的函数返回true时,迭代继续(到下一个对象)l
当函数返回false时,迭代停止
但仅停止迭代
代码点击了break
,但是在这种情况下没有其他return
语句要执行。在第一个代码段return false代码>仅停止执行传递给jquery每个方法的内部函数。它还根据jQueryAPI停止jquery迭代。但无论如何,trnReady返回true
第二个代码段是正确的,但您可以对其进行优化,替换r=false代码>到返回r=false代码>(当您已经知道其中一个字段未填充时,jquery将停止迭代)它确实停止执行代码。。。但仅在您执行返回的函数中,这是传递给.each()
的函数。调用方不返回函数的返回值:)混淆OP的行为是由each
中的匿名函数引起的,而不是case
语句。谢谢您提供的优化提示!