$(document).ready速记
$(document).ready
是以下简写forms吗?
(function($){ //some code })(jQuery);
我看到这种模式使用了很多,但我无法find任何参考。 如果是$(document).ready()
简写forms,有没有什么特别的原因可能不起作用? 在我的testing中,似乎总是在准备好的事件之前开火。
$(document).ready(handler)
的简写是$(handler)
(其中handler
是一个函数)。 看到这里 。
您问题中的代码与.ready()
无关。 相反,它是以jQuery对象作为参数的立即调用的函数expression式(IIFE)。 其目的是将至less$
variables的范围限制在自己的块中,所以不会引起冲突。 您通常会看到jQuery插件使用的模式,以确保$ == jQuery
。
简写是:
$(function() { // Code here });
正确的速记是这样的:
$(function() { // this behaves as if within document.ready });
您发布的代码…
(function($){ //some code })(jQuery);
…创build一个匿名函数,并立即执行它与jQuery
作为arg $
传入。 所有它有效地做的是把代码放在函数内部,像正常一样执行它,因为$
已经是jQuery
的别名了。 :d
这不是$(document).ready()
的缩写。
您发布的代码包含内部代码,并使jQuery可用作为$
而不会污染全局名称空间。 当你想在一个页面上同时使用prototype和jQuery时,可以使用它。
logging在这里: http : //learn.jquery.com/using-jquery-core/avoid-conflicts-other-libraries/#use-an-immediately-invoked-function-expression
这些特定的行是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
variables的框架
那这个呢?
(function($) { $(function() { // more code using $ as alias to jQuery // will be fired when document is ready }); })(jQuery);
顺便说一下,我一直使用的另一个快捷方式(基本上是已经提到的一个版本)
$(myFunction()); //myFunction already defined elsewhere