我不知道为什么这两个代码片段不会产生相同的结果。在第一个示例中,我创建了一个函数并传递它,在第二个示例中,我编写了一个匿名函数。
function funct() {
$("p").slideUp(1000);
}
$(document).ready(funct());
$(document).ready(function() {
$("p").slideUp(1000);
});
第二个有效,第一个无效。有人可以告诉我为什么吗?
我不知道为什么这两个代码片段不会产生相同的结果。在第一个示例中,我创建了一个函数并传递它,在第二个示例中,我编写了一个匿名函数。
function funct() {
$("p").slideUp(1000);
}
$(document).ready(funct());
$(document).ready(function() {
$("p").slideUp(1000);
});
第二个有效,第一个无效。有人可以告诉我为什么吗?
当你这样做时:
$(document).ready(funct());
您正在funct()
立即执行并将其返回值传递给.ready()
您不想要的方法。在函数执行之前,它不会等待文档准备好。您可能打算这样做:
$(document).ready(funct);
这样,您只是将函数引用传递给该.ready()
方法,然后它可以稍后而不是立即执行该函数,然后它的行为将与匿名函数示例相同。
要立即执行一个函数,在它后面加上括号,比如funct()
. 要将函数作为引用传递给您传递给它的函数/方法,请去掉括号,只传递 name funct
。
要了解为什么这不起作用,让我们检查一下执行以下代码时会发生什么:
$(document).ready(funct());
首先funct()
被执行。这可能会或可能不会返回一些东西。如果它里面有类似return 1
的东西,这将作为参数提供给$(document).ready( ... )
. 在这种情况下null
或undefined
返回。您想要的是提供函数引用来$(document).ready( ... )
代替。你通过传递funct
给它来做到这一点(就像任何其他变量一样)。
同样,拥有一个匿名函数将返回对该匿名函数的函数引用,然后由$(document).ready( ... )
.
$(document).ready() 将一个函数作为其参数,因此您必须将一个函数传递给它。要么做这样的事情:
function funct() {
return function() {
$("p").slideUp(1000);
}
}
$(document).ready(funct());
或者正如其他人所说,只需将函数的引用作为参数传递,如下所示:
$(document).ready(funct);