Javascript $(document).ready(function(){…})中的自调用函数;
我已经将我的javascript封装在Javascript $(document).ready(function(){…})中的自调用函数;,javascript,jquery,Javascript,Jquery,我已经将我的javascript封装在 jQuery(document).ready(function($) { }); 我想知道通过以下两种方式调用it内部函数的含义: jQuery(document).ready(function($) { $(function () { // do something }); }); vs 编辑: 我还想知道这两种方式中哪一种更“正确”呢?请随意添加您自己的实现。鉴于$(function(){})是$的别名。ready
jQuery(document).ready(function($) {
});
我想知道通过以下两种方式调用it内部函数的含义:
jQuery(document).ready(function($) {
$(function () {
// do something
});
});
vs
编辑:
我还想知道这两种方式中哪一种更“正确”呢?请随意添加您自己的实现。鉴于$(function(){})
是$的别名。ready
,您的第一个示例只是一个$。ready
包装在$.ready
中,这没有任何意义,即使我不认为它有任何严重的性能影响
第二个示例是人们通常在JavaScript文件的最外层执行的操作,以防止:
到目前为止,我在大多数JavaScript文件中都看到了这一点。它可以防止全局变量范围污染,并确保即使在noConflict
模式下,$
实际上也引用了jQuery
关于
$.ready
需要注意的一件重要事情是,如果在关闭
标记之前加载JavaScript,那么实际上并不需要它(这样做也会提高性能)
&&
都是一样的
除了第二个,它只适用于jQuery1.0+(我想,如果有人错了,一定会纠正的)
此外
$
是jQuery
名称空间的简写符号。因此,jQuery(
与$(
)相同。然后您可以编写$(document)
,这将与jQuery(document)
相同,其中$
是名称空间的缩写,()
输入给定的参数,在本例中,该参数是document
,在javascript中是相同的
(function (myNamespace) {
function myNamespace () { }
return myNamespace;
}(window.myNamespace = window.myNamespace || {}));
$(function
是jQuery的doc.ready调用函数,正常返回通常被称为jQuery对象
。其中索引0是传递的元素,其他所有内容都是该元素上的本机js返回或jQuery道具和方法。不同之处在于执行顺序:
jQuery(document).ready(function($) {
$(function () {
// inner handler
});
// outer handler
});
内部ready
处理程序中的代码在外部处理程序中的代码之后执行:
立即函数表达式中的代码在定义函数的地方执行,即在表达式后面的代码之前执行:
如果您想定义变量的范围,请使用第二种方法。第一种方法没有多大意义,您应该只在实际需要时注册
ready
事件处理程序。在这种情况下,DOM已经准备好了,因为您将处理程序绑定到另一个ready处理程序中
如果您不想定义变量的作用域,请不要使用这两个变量。只需将所有代码放在外部处理程序中即可。正如大家所说:
jQuery(document).ready(function ($) { });
// is the document.ready as:
jQuery(function ($) { }); // <-- this is the short-hand version
// the $ inside the parenthesis really just means that $ is to refer to jQuery inside.
// you could just do:
$(function () { }); // if you know it will be anyway
- 使用
在文档准备就绪后的任何时候都是完全安全的,指定的函数将立即启动:$(函数(){});
.ready()
- 使用
无论在文档准备就绪事件内部还是外部使用,都能按预期工作。它(i)创建一个闭包(ii)立即触发(iii)不关心文档是否准备就绪(function(){})(
事实上,如果您不需要闭包,那么将函数内联;
$(function(){});
本身充当闭包。第一个示例将另一个函数添加到函数的就绪
队列中(如果我记得正确的话)。第二种方法只是创建一个自动执行的匿名函数。我建议使用第二种方法,因为它们做的事情几乎相同。通过OP使用的方法可以更容易地实现这一点:jQuery(document).ready(function($){…});
@FelixKling它可能更容易,也可能不容易,但肯定不是更灵活(也就是说,你必须使用$.ready
,如果我在页面末尾加载我的东西,我就不需要使用它了。另外,我的示例是由页面建议的。我刚才谈到了DOM ready事件的范围。插件是另一回事;)啊,我明白了。我想我这样做是因为他在他的例子中已经使用了类似的构造,然后我的大脑连接到了jQuery插件。尽管如此,我通常用这种方式封装我的所有JavaScript文件,因为即使这不是最简单的方式,它至少是一致的:)
$(function () {
jQuery(document).ready(function($) {
$(function () {
// inner handler
});
// outer handler
});
jQuery(document).ready(function($) {
(function () {
// do something
})();
// outer handler
});
jQuery(document).ready(function ($) { });
// is the document.ready as:
jQuery(function ($) { }); // <-- this is the short-hand version
// the $ inside the parenthesis really just means that $ is to refer to jQuery inside.
// you could just do:
$(function () { }); // if you know it will be anyway
(function (myNamespace) {
function myNamespace () { }
return myNamespace;
}(window.myNamespace = window.myNamespace || {}));