0

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

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

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

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

4

3 回答 3

5

当你这样做时:

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

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

$(document).ready(funct);

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

要立即执行一个函数,在它后面加上括号,比如funct(). 要将函数作为引用传递给您传递给它的函数/方法,请去掉括号,只传递 name funct

于 2013-11-02T20:37:08.213 回答
2

要了解为什么这不起作用,让我们检查一下执行以下代码时会发生什么:

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

首先funct()被执行。这可能会或可能不会返回一些东西。如果它里面有类似return 1的东西,这将作为参数提供给$(document).ready( ... ). 在这种情况下nullundefined返回。您想要的是提供函数引用来$(document).ready( ... )代替。你通过传递funct给它来做到这一点(就像任何其他变量一样)。

同样,拥有一个匿名函数将返回对该匿名函数的函数引用,然后由$(document).ready( ... ).

于 2013-11-02T20:39:45.163 回答
1

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

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

或者正如其他人所说,只需将函数的引用作为参数传递,如下所示:

$(document).ready(funct);
于 2013-11-02T20:37:36.680 回答