我刚刚学会了自称匿名函数。我遇到的一些代码片段使用了自调用函数和$(document).ready。使用两者似乎是多余的,或毫无意义的。
是否存在使用
的情况(function(){
$(document).ready();
})();
VS
$(document).ready(function(){
(function(){})();
});
我认为您要么立即执行脚本,要么在DOM加载后执行。我不明白为什么你们两个都在一起使用。
感谢。
答案 0 :(得分:11)
第一个例子肯定有一个用例。如果您在同一页面上加载了其他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对象中,但可以使用$
编写以保持代码整洁。
答案 1 :(得分:2)
你不想一起使用它们,你正在做的事情需要你吗?
在这里的jquery api文档http://api.jquery.com/ready/中,您可以看到以下示例:
.ready()方法通常与匿名函数一起使用:
$(document).ready(function(){
// .ready()的处理程序调用。});
这相当于调用:
$(function(){
// .ready()的处理程序调用。});
但我不确定这是否能回答你的问题,因为我看不到你实际问的问题。希望这有助于实现同样的目标!
答案 2 :(得分:1)
引入另一个闭包的唯一原因是引入另一个范围边界来加载/保护全局对象,例如$。
例如:
$(document).ready(function(){
// Do upper scope things.
(function(){
// Do lower scope things.
})();
});
基于你说你最近在学习这些东西,我认为你是相对较新的JavaScript。
我已经整理了一篇博文,可能有助于从JavaScript新手的角度解释一些基本概念,包括功能范围。 http://bit.ly/tLkykX