我正在使用checkForm函数来验证一个简单的表单。当用户按提交时,运行checkForm。第一个和第二个例子有什么区别?
示例1。
$('form').submit(function(){
checkForm();
});
示例2。
$('form').submit(function(){
return checkForm();
});
答案 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;
});