jQuery 新手:jQuery(function($) ... ) 是啥意思?
Posted
技术标签:
【中文标题】jQuery 新手:jQuery(function($) ... ) 是啥意思?【英文标题】:jQuery newbie: what does jQuery(function($) ... ) means?jQuery 新手:jQuery(function($) ... ) 是什么意思? 【发布时间】:2011-09-21 05:30:26 【问题描述】:我知道在 jQuery 中,$(callback)
与 jQuery(callback)
相同,其效果与 $(document).ready()
相同。
怎么样
jQuery(function($)
);
谁能给我解释一下这种功能是什么意思?
它有什么作用?
这个和$(callback)
有什么区别??
这个和$(function())
有什么区别??
【问题讨论】:
【参考方案1】:jQuery(function($)
);
是所有三个版本中最安全的版本。它使$
成为局部变量,从而优雅地避免了与可能使用$
符号的任何其他变量的冲突。
我想它也是最近添加的,不记得以前见过。
这些函数都做同样的事情——当 DOM 准备好时执行一些代码。 $(document).ready(function())
是原始的,它匹配底层的javascript API。
“$”和“jQuery”接受函数作为参数被创建为快捷方式,以避免重复这种常见的结构。接受一个接受 $ 作为其第一个参数的函数是进一步的语法糖 - 现在您可以方便地使用闭包,而无需自己做。
【讨论】:
我喜欢你的回答(如果正确的话),解释得很清楚:) 我可以执行以下操作吗?相同的?$(function($)...);
所以$(document).ready(function())
等价于jQuery(function($) );
??【参考方案2】:
$(function())
是语法错误。
$()
创建一个空的 jQuery 对象。
$(document).ready(function() ... )
在 DOM 就绪时执行给定的函数
$(function() ... )
是同一件事的捷径
jQuery(function($) ... )
也这样做,但它也使 $
在函数内部可用,无论它在外部设置什么。
【讨论】:
【参考方案3】:当您调用主要的 jQuery 工厂函数(jQuery(<something>)
或常用快捷方式 $(<something>)
)时,它会根据 <something>
的类型决定要做什么。
如果您将字符串作为<something>
传递,它假定这是一个选择器规范,并将返回与该选择器匹配的元素的 jQuery 列表。
如果您传递一个 jQuery 对象(表示元素列表,即从先前调用 jQuery 返回的对象),它将只返回该对象(本质上这是一个非操作)。
如果你向它传递一个 DOM 元素,它将返回一个只包含该元素的 jQuery 列表(因此你可以将 jQuery 方法应用于该元素)。这就是 $(document).ready()
发生的事情 - 你将 DOM 元素“文档”传递给工厂函数,它返回一个表示该元素的 jQuery 对象,然后使用该对象的 ready() 方法将事件处理函数添加到就绪事件列表中的所有 DOM 元素(在本例中只有一个,document
)。
如果你传递一个函数,这只是“在一切准备就绪时运行它”的简写,所以$(function() ... );
相当于$(document).ready(function() ... );
【讨论】:
【参考方案4】:所以我对此进行了更正,如果您阅读了第一条评论,它会给出一些背景信息。
jQuery(function()
// Document Ready
);
(function($)
// Now with more closure!
)(jQuery);
我不是 100% 确定,但我认为这只是将 jQuery 对象传递到闭包中。我会在谷歌上做一些挖掘,看看我是对还是错,并会相应地更新。
编辑:
我说得很对,但这里直接来自他们的网站:
http://docs.jquery.com/Plugins/Authoring
“我知道并喜欢的很棒的美元符号在哪里?它仍然存在,但是为了确保您的插件不会与可能使用美元符号的其他库发生冲突,最好将 jQuery 传递给 self执行将其映射到美元符号的函数(闭包),因此在其执行范围内它不能被另一个库覆盖。”
【讨论】:
-1 为您的第一行。这样做有一个很好的理由:如果您使用$.noConflict();
来恢复包含 jQuery 之前的任何 $
,您可以在您的函数中使 $
可用(就绪回调接收 jQuery 对象作为第一个参数)将所有内容包装在另一个匿名函数中。
您准备好在文档中这样做了吗?很公平,我会同时更新帖子和我自己的常识!感谢您的澄清。
视情况而定 - 如果您只想编写一个 document.ready 函数,那么它是有意义的。如果在 document.ready 函数之前/之后有任何其他代码使用 jQuery,我肯定会使用 (function($) ... )(jQuery);
方法【参考方案5】:
首先,jQuery()
与 $(document).ready()
不一样
$()
是jQuery()
的快捷方式
还有……
$(function() ...);
是$(document).ready(function() ... );
的快捷方式
因此:
jQuery(function() ... )
功能与
相同$(document).ready(function( ... );
但是...
jQuery('#foo').css("background-color", "#f00");
作用不一样
$(document).ready('#foo').css("background-color", "#f00");
所以……
jQuery()
与$(document).ready()
不相同
【讨论】:
嗯...我很确定如果你在里面传递一个函数? 是的,如果传递一个函数,使用匿名函数快捷方式,两者将执行相同的操作。但是说jQuery()
和$(document).ready()
一样是错误的说法。以上是关于jQuery 新手:jQuery(function($) ... ) 是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章
jQuery: $(document).on(event, name as selector, function [重复]