调用函数和返回函数有啥区别?
Posted
技术标签:
【中文标题】调用函数和返回函数有啥区别?【英文标题】:What's the difference between calling a function and returning a function?调用函数和返回函数有什么区别? 【发布时间】:2014-02-23 00:54:50 【问题描述】:我正在使用 checkForm 函数来验证一个简单的表单。当用户按下提交时,运行 checkForm。第一个例子和第二个例子有什么区别?
示例 1。
$('form').submit(function()
checkForm();
);
示例 2。
$('form').submit(function()
return checkForm();
);
【问题讨论】:
checkForm()
正在返回什么?
在事件处理程序中可以返回true
或false
,后者在jQuery中结合preventDefault
和stopPropagation
,停止表单提交,所以如果checkForm()
函数返回@ 987654329@,表单不提交,如果返回true
,则表单提交等等。
在示例 2 中,您没有返回函数,而是返回执行函数的结果。返回函数如下所示:return checkForm;
。当然,在这种情况下这没有意义,但我认为区别很重要。
@JasonP 很好,谢谢。
【参考方案1】:
您的代码的主要区别在于,在第一种情况下您只需运行验证,而在第二种情况下,如果您的验证返回布尔值,您将阻止表单提交。
所以在第一种情况下,您的表单每次都会提交,即使checkForm()
将返回false
。在第二种情况下,如果checkForm()
将返回true
,您的表单将被提交,如果它返回false
,它将阻止表单提交。
所以基本上假设checkForm()
返回false
,您的函数在第一个示例中将如下所示:
$('form').submit(function()
false;
);
在第二个例子中:
$('form').submit(function()
return false;
);
【讨论】:
感谢您的回答,所以我注意到了。但是为什么 checkForm 函数不能自己解决这个问题呢?为什么我们必须返回函数以防止在错误值的情况下提交? 您没有返回示例中的函数,而是返回函数结果。因此,如果您将()
添加到您的函数名称中,它将被调用。即使您在该函数内部有return
语句,这也不会阻止表单提交,直到您在submit
方法中拥有return
语句。【参考方案2】:
在第二个示例中,您实际上并没有返回函数,而是返回执行该函数的结果。 (考虑在这种情况下从右到左执行代码。)
为了说明,稍微改变你的第一个例子:
$('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
处理程序),这当然没有意义,因为它需要一个布尔值而不是函数。
【讨论】:
感谢您的详细回答,它确实阐明了差异。 当然。感谢这个伟大的答案。对我帮助很大。以上是关于调用函数和返回函数有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章