2014-01-30 88 views
1

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

例1

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

例2

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

'checkForm()'返回什么? – Satpal

+0

在事件处理函数中,你可以返回'true'或'false',后者在jQuery中结合'preventDefault'和'stopPropagation',停止表单提交,所以如果checkForm()函数返回false,没有被提交,如果它返回'true'表单被提交等。 – adeneo

+3

在例2中,你没有返回一个函数,而是返回执行该函数的结果。返回一个函数看起来像这样:'return checkForm;'。当然,在这种情况下这没有意义,但我认为这种区别很重要。 –

回答

4

在第二个例子中,你实际上并不返回功能而是已执行该功能的结果。 (考虑到代码从右到左在这种情况下执行)

为了说明这一点,稍微改变你的第一个例子:

$('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处理程序),这当然是没有意义的,因为它期望一个布尔值而不是函数。

+0

感谢您的详细解答,它真正澄清了区别。 – Operator

2

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

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

所以基本上承担checkForm()返回false,你的函数将在第一个例子是:

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

并在第二个例子:

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

感谢您的回答,所以我注意到了。但是checkForm函数怎么不自己处理呢?为了防止在虚假价值的情况下提交,我们如何返回函数? – Operator

+0

你不会在你的例子中返回函数,你正在返回函数结果。所以如果你添加'()'到你的函数名称,它就会被调用。即使你在函数内部有'return'语句,这也不会阻止表单提交,直到'submit'方法中有'return'语句。 – antyrat

+0

@操作员看到我更新的答案 – antyrat

相关问题