我不知道为什么这两段代码不会产生相同的结果。在第一个例子中,我创建了一个函数并传递它,在第二个例子中,我编写了一个匿名函数。
function funct() {
$("p").slideUp(1000);
}
$(document).ready(funct());
$(document).ready(function() {
$("p").slideUp(1000);
});
第二个有效,第一个没有。有人可以告诉我为什么吗?
答案 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( ... )
的参数提供。在这种情况下,会返回null
或undefined
。您想要的是提供$(document).ready( ... )
的函数引用。你可以通过将funct
传递给它来实现这一点(就像任何其他变量一样)。
类似地,拥有一个匿名函数将返回该匿名函数的函数引用,然后由$(document).ready( ... )
使用。
答案 2 :(得分:1)
$(document).ready()将函数作为参数,因此您必须将函数传递给它。 要么做这样的事情:
function funct() {
return function() {
$("p").slideUp(1000);
}
}
$(document).ready(funct());
或者正如其他人所说的那样,只需将对函数的引用传递给像这样的参数:
$(document).ready(funct);