JavaScript返回错误后执行代码

时间:2012-06-11 14:00:21

标签: javascript

我正在使用一个函数来检查是否填写了必填字段。我有这两个功能,应该做同样的事情,但第一个没有。在遇到退货后,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;
}

我认为第一次返回会停止执行代码吗?我想知道它是否与范围有关?

5 个答案:

答案 0 :(得分:5)

在第一个代码片段中,return false;仅停止执行传递给jquery 每个方法的内部函数。它还相应于jquery API停止jquery迭代。但无论如何,trnReady都会返回true。

第二个代码段是正确的,但您可以优化它,将r = false;替换为return r = false;(当您已经知道其中一个字段未填充时,它将停止jquery迭代)

答案 1 :(得分:3)

在第一个代码段中,return适用于作为each参数的函数。 return不适用于trnReady功能。因此,return false适用于each中的匿名函数。

在第二个代码段中,return正好是return函数的trnReady,因此效果正常。

答案 2 :(得分:2)

这些函数中的每一个都包含嵌套在其中的第二个函数,它是嵌套函数内部的返回,您希望它们生效 - 但它们不会生效。您无法从内部函数返回外部函数的调用者。您可以做的最好的事情是在内部函数中设置一个变量,然后从外部函数返回该变量的值,如第二个示例所示。

答案 3 :(得分:1)

在第一个示例中,函数返回false但仅在当前case语句的范围内。您的false有效,任何操作都不会在发生时调用。

编辑: 返回false仅在您传递给.each的匿名函数内有效。

答案 4 :(得分:1)

jQuery each是一个迭代器,它将每个对象传递给您定义的函数。

当定义的函数返回true时,迭代继续(到下一个对象)l 当函数返回false时,迭代停止。

但只停止了迭代

代码命中break,但在这种情况下没有其他return语句要执行。