提供命名函数时,函数不起作用

时间:2013-11-02 20:33:41

标签: jquery anonymous-function

我不知道为什么这两段代码不会产生相同的结果。在第一个例子中,我创建了一个函数并传递它,在第二个例子中,我编写了一个匿名函数。

 function funct() {
        $("p").slideUp(1000);
 }
 $(document).ready(funct());

 $(document).ready(function() {
        $("p").slideUp(1000);
 });

第二个有效,第一个没有。有人可以告诉我为什么吗?

3 个答案:

答案 0 :(得分:5)

执行此操作时:

$(document).ready(funct());

您正在立即执行funct()并将其返回值传递给.ready()方法,这不是您想要的方法。在函数执行之前,它不会等待文档准备就绪。你可能想要做的是:

$(document).ready(funct);

这样,您只是将函数引用传递给.ready()方法,然后它可以稍后执行该函数而不是立即执行该函数,然后它将与匿名函数示例完全相同。

要执行一个函数,请立即将parens放在funct()之后。要将一个函数作为一个可以通过函数/方法调用的引用传递给你,请不要使用parens,只需传递名称funct

答案 1 :(得分:2)

要理解为什么这不起作用,让我们来看看执行以下代码时会发生什么:

$(document).ready(funct());

执行第一个funct()。这可能会也可能不会返回。如果它中包含return 1之类的内容,则会将其作为$(document).ready( ... )的参数提供。在这种情况下,会返回nullundefined。您想要的是提供$(document).ready( ... )的函数引用。你可以通过将funct传递给它来实现这一点(就像任何其他变量一样)。

类似地,拥有一个匿名函数将返回该匿名函数的函数引用,然后由$(document).ready( ... )使用。

答案 2 :(得分:1)

$(document).ready()将函数作为参数,因此您必须将函数传递给它。 要么做这样的事情:

function funct() {
     return function() {
           $("p").slideUp(1000);
     }        
 }
 $(document).ready(funct());

或者正如其他人所说的那样,只需将对函数的引用传递给像这样的参数:

$(document).ready(funct);