我使用checkForm函数来验证一个简单的表单。当用户按提交时,运行checkForm。第一个和第二个例子有什么区别?调用函数和返回函数有什么区别?
例1
$('form').submit(function(){
checkForm();
});
例2
$('form').submit(function(){
return checkForm();
});
我使用checkForm函数来验证一个简单的表单。当用户按提交时,运行checkForm。第一个和第二个例子有什么区别?调用函数和返回函数有什么区别?
例1
$('form').submit(function(){
checkForm();
});
例2
$('form').submit(function(){
return checkForm();
});
在第二个例子中,你实际上并不返回功能而是已执行该功能的结果。 (考虑到代码从右到左在这种情况下执行)
为了说明这一点,稍微改变你的第一个例子:
$('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
处理程序),这当然是没有意义的,因为它期望一个布尔值而不是函数。
感谢您的详细解答,它真正澄清了区别。 – Operator
在你的代码的主要区别是,在第一种情况下,你只要运行验证,并在第二种情况下,如果您的验证将返回布尔值将阻止表单提交。
因此,在第一种情况下,您的表单将每次提交,即使checkForm()
将返回false
。在第二种情况下,如果checkForm()
将返回true
您的表单将被提交,如果它将返回false
它将阻止表单提交。
所以基本上承担checkForm()
返回false
,你的函数将在第一个例子是:
$('form').submit(function(){
false;
});
并在第二个例子:
$('form').submit(function(){
return false;
});
'checkForm()'返回什么? – Satpal
在事件处理函数中,你可以返回'true'或'false',后者在jQuery中结合'preventDefault'和'stopPropagation',停止表单提交,所以如果checkForm()函数返回false,没有被提交,如果它返回'true'表单被提交等。 – adeneo
在例2中,你没有返回一个函数,而是返回执行该函数的结果。返回一个函数看起来像这样:'return checkForm;'。当然,在这种情况下这没有意义,但我认为这种区别很重要。 –