调用函数和返回函数有什么区别?

时间:2014-01-30 15:56:48

标签: javascript jquery return

我正在使用checkForm函数来验证一个简单的表单。当用户按提交时,运行checkForm。第一个和第二个例子有什么区别?

示例1。

$('form').submit(function(){
    checkForm();
});

示例2。

$('form').submit(function(){
    return checkForm();
});

2 个答案:

答案 0 :(得分:6)

在第二个示例中,您实际上并未返回函数,而是执行该函数的结果。 (考虑到在这种情况下从右到左执行代码。)

为了说明,请稍微更改您的第一个示例:

$('form').submit(function(){
    var result = checkForm();
});

如您所见,执行该函数并从函数返回结果。只是没有任何结果。随着匿名函数的完成,它会立即超出范围,逐渐淡入古代。

稍微修改第二个例子以进一步说明:

$('form').submit(function(){
    var result = checkForm();
    return result;
});

与第一个示例一样,执行checkForm并将其结果存储在变量中。然后从匿名函数返回该值。当然,这个过程可以内联,以便不需要临时变量:

$('form').submit(function(){
    return checkForm();
});

操作顺序不会改变,执行checkForm,返回结果,并从匿名函数返回结果。

可以返回函数本身,但实际上没有执行它:

$('form').submit(function(){
    return checkForm;
});

由于函数在JavaScript中是“一等公民”并且可以像任何其他变量一样传递,这将返回实际函数而不是函数的结果。假设调用代码可能最终会执行该函数。但是,在这种情况下(一个submit处理程序),这当然是没有意义的,因为它期望一个布尔值而不是一个函数。

答案 1 :(得分:2)

代码的主要区别在于,在第一种情况下,您只是运行验证;在第二种情况下,如果验证返回布尔值,则会阻止表单提交。

因此,在第一种情况下,即使checkForm()将返回false,您的表单也会每次都提交。在第二种情况下,如果checkForm()将返回true,则会提交您的表单,如果它将返回false,则会阻止表单提交。

所以基本上假设checkForm()返回false,你的函数将在第一个示例中看作:

$('form').submit(function(){
    false;
});

,在第二个例子中:

$('form').submit(function(){
    return false;
});