调用函数和返回函数有啥区别?

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() 正在返回什么? 在事件处理程序中可以返回truefalse,后者在jQuery中结合preventDefaultstopPropagation,停止表单提交,所以如果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 处理程序),这当然没有意义,因为它需要一个布尔值而不是函数。

【讨论】:

感谢您的详细回答,它确实阐明了差异。 当然。感谢这个伟大的答案。对我帮助很大。

以上是关于调用函数和返回函数有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

main函数的返回类型有啥区别

c语言中函数定义和声明有啥区别

VB里面有些运行函数加括号和加引号有啥区别

加入线程(阻塞调用线程直到线程终止)和普通函数调用有啥区别

JS中函数的调用、引用有啥区别?

C语言中exit(0)与exit(1)有啥区别??