使用自调用匿名函数和$(文档).ready

我刚刚学会了自称匿名函数。 我遇到的一些代码片段使用了自调用函数和$(document).ready。 使用两者似乎多余或毫无意义。

有没有你使用的情况

(function(){ $(document).ready(); })(); 

 $(document).ready(function(){ (function(){})(); }); 

我想你要么想要立即执行脚本,要么在加载DOM之后执行脚本。 我不明白为什么你们两个都在一起使用。

谢谢。

第一个例子肯定有一个用例。 如果您在同一页面上加载了其他JS库/脚本,则无法保证它们不会覆盖$变量。 (当你在同一页面上有Prototype和jQuery时,这很常见)。

因此,如果Prototype使用$ ,则需要在使用jQuery随时使用jQuery。 这可能会变得非常难看:

 jQuery(function(){ jQuery('a', '#content').bind('click', function(){ if(jQuery(this).attr('href') == 'www.google.com') { alert("This link goes to Google"); jQuery(this).addClass('clicked')); } }); }) 

请记住,我们不能使用$因为这是全局范围内Prototype的一种方法。

但如果你把它包裹在里面..

 (function($){ $(function(){ // your code here }); })(jQuery); 

$实际上会在里面引用jQuery库,同时仍然在外面引用Prototype! 这有助于整理代码:

 (function($){ $(function{}( jQuery('a', '#content').bind('click', function(){ if(jQuery(this).attr('href') == 'www.google.com') { alert("This link goes to Google"); jQuery(this).addClass('clicked')); } }); )); })(jQuery); 

这是jQuery扩展的常见模式,以确保它们始终添加到jQuery对象中,但可以使用$编写以保持代码整洁。

你不想一起使用它们,你正在做的事情需要你吗?

在http://qui.jquery.com/ready/的jquery api文档中,您可以看到以下示例:

.ready()方法通常与匿名函数一起使用:

$(document).ready(function(){
// .ready()的处理程序调用。

});

这相当于调用:

$(function(){
// .ready()的处理程序调用。

});

但是我不确定这是否能回答你的问题,因为我看不到你实际问的问题。 希望这有助于同样的事情!

引入另一个闭包的唯一原因是引入另一个范围边界来加载/保护全局对象,例如$。

例如:

 $(document).ready(function(){ // Do upper scope things. (function(){ // Do lower scope things. })(); }); 

基于你说你最近了解这些东西,我认为你是相对较新的JavaScript。

我已经整理了一篇博文,可能有助于从JavaScript新手的角度解释一些基本概念,包括函数范围。 http://bit.ly/tLkykX