$(document).ready
是以下简写形式吗?
(function($){
//some code
})(jQuery);
我看到这种模式使用了很多,但我无法找到任何参考。如果是$(document).ready()
的简写,是否有任何特殊原因可能不起作用?在我的测试中,它似乎总是在准备好事件之前开火。
$(document).ready
是以下简写形式吗?
(function($){
//some code
})(jQuery);
我看到这种模式使用了很多,但我无法找到任何参考。如果是$(document).ready()
的简写,是否有任何特殊原因可能不起作用?在我的测试中,它似乎总是在准备好事件之前开火。
$(document).ready(handler)
的简写为$(handler)
(其中handler
是函数)。请参阅here。
您问题中的代码与.ready()
无关。相反,它是一个以jQuery对象为参数的立即调用的函数表达式(IIFE)。其目的是将至少$
变量的范围限制在其自己的块中,以免造成冲突。您通常会看到jQuery插件使用的模式,以确保$ == jQuery
。
*技术上*它是**立即调用的函数表达式**。如果它是自我调动的,它会从内部调用它自己。在网上搜索'iife',或者跳到[牛仔阿曼着名的博客文章](http://benalman.com/news/2010/11/immediately-invoked-function-expression/)。详细...啧。 – jtheletter 2014-10-22 19:36:46
这不是$(document).ready()
的简写。
您发布的代码包含了内部代码,并使得jQuery可用为$
而不会污染全局名称空间。当你想在一个页面上使用prototype和jQuery时,可以使用它。
正确的速记是这样的:
$(function() {
// this behaves as if within document.ready
});
您发布的代码...
(function($){
//some code
})(jQuery);
...创建一个匿名函数,并立即执行它jQuery
作为arg被传入。它所有的功能都是将函数内的代码像正常一样执行,因为$
已经是jQuery
的别名。 :d
你可以说它也确保$是jQuery的别名,如果其他工具也使用$作为别名加载 – FRoZeN 2017-01-04 09:51:47
这些具体的线是jQuery插件通常包装:
” ......以确保你的插件不与可能使用美元符号其他库发生冲突,这是一个最佳实践将jQuery传递给一个自动执行的函数(闭包),该函数将其映射到美元符号,以便在执行范围内不会被另一个库覆盖。“
(function($){
$.fn.myPlugin = function() {
// Do your awesome plugin stuff here
};
})(jQuery);
为准备多框架的安全简写为:
jQuery(function($, undefined) {
// $ is guaranteed to be short for jQuery in this scope
// undefined is provided because it could have been overwritten elsewhere
});
这是因为jQuery是不是使用了$
和undefined
变量的唯一框架
也可以写成'(function($){...})(jQuery); ' – 2015-01-20 05:48:19
@MikeCauser也是一个很好的方法,但它不会被'就绪'调用,而是立即调用它 – 2015-01-20 07:45:19
这个怎么样?
(function($) {
$(function() {
// more code using $ as alias to jQuery
// will be fired when document is ready
});
})(jQuery);
所提到的图形函数内部中定义的任何变量(例如'变种somevar;')将不会改变功能 – 2013-12-16 12:42:02
的代码具有确保$效果以外的具有相同名称的变量的内容表示内的jQuery功能块,因此代码可以移植到禁用jQuery的$ alias或定义为其他位置的地方。 – AsksAnyway 2014-03-22 18:56:15