2011-05-14 128 views
203

$(document).ready是以下简写形式吗?

(function($){ 

//some code 

})(jQuery); 

我看到这种模式使用了很多,但我无法找到任何参考。如果是$(document).ready()的简写,是否有任何特殊原因可能不起作用?在我的测试中,它似乎总是在准备好事件之前开火。

+0

所提到的图形函数内部中定义的任何变量(例如'变种somevar;')将不会改变功能 – 2013-12-16 12:42:02

+0

的代码具有确保$效果以外的具有相同名称的变量的内容表示内的jQuery功能块,因此代码可以移植到禁用jQuery的$ alias或定义为其他位置的地方。 – AsksAnyway 2014-03-22 18:56:15

回答

225

$(document).ready(handler)的简写为$(handler)(其中handler是函数)。请参阅here

您问题中的代码与.ready()无关。相反,它是一个以jQuery对象为参数的立即调用的函数表达式(IIFE)。其目的是将至少$变量的范围限制在其自己的块中,以免造成冲突。您通常会看到jQuery插件使用的模式,以确保$ == jQuery

+11

*技术上*它是**立即调用的函数表达式**。如果它是自我调动的,它会从内部调用它自己。在网上搜索'iife',或者跳到[牛仔阿曼着名的博客文章](http://benalman.com/news/2010/11/immediately-invoked-function-expression/)。详细...啧。 – jtheletter 2014-10-22 19:36:46

459

简写为:

$(function() { 
    // Code here 
}); 
+22

第一个参数是'$'。可能需要添加.jQuery(function($,undefined){});' – Raynos 2011-05-14 19:06:13

+3

@raynos它不是必需的。上面的代码可以很好地作为'$(document).ready(function(){})的别名工作;' – 2011-05-14 19:10:39

+8

知道你获得'$'作为第一个参数是免费的。 – Raynos 2011-05-14 19:21:19

79

正确的速记是这样的:

$(function() { 
    // this behaves as if within document.ready 
}); 

您发布的代码...

(function($){ 

//some code 

})(jQuery); 

...创建一个匿名函数,并立即执行它jQuery作为arg被传入。它所有的功能都是将函数内的代码像正常一样执行,因为$已经是jQuery的别名。 :d

+2

你可以说它也确保$是jQuery的别名,如果其他工具也使用$作为别名加载 – FRoZeN 2017-01-04 09:51:47

12

这些具体的线是jQuery插件通常包装:

” ......以确保你的插件不与可能使用美元符号其他库发生冲突,这是一个最佳实践将jQuery传递给一个自动执行的函数(闭包),该函数将其映射到美元符号,以便在执行范围内不会被另一个库覆盖。“

(function($){ 
    $.fn.myPlugin = function() { 
    // Do your awesome plugin stuff here 
    }; 
})(jQuery); 

http://docs.jquery.com/Plugins/Authoring

9

为准备多框架的安全简写为:

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变量的唯一框架

+0

也可以写成'(function($){...})(jQuery); ' – 2015-01-20 05:48:19

+1

@MikeCauser也是一个很好的方法,但它不会被'就绪'调用,而是立即调用它 – 2015-01-20 07:45:19

0

这个怎么样?

(function($) { 
    $(function() { 
    // more code using $ as alias to jQuery 
    // will be fired when document is ready 
    }); 
})(jQuery); 
相关问题