jQuery(函数($){...})是什么意思?

h5qlskok  于 2023-01-12  发布在  jQuery
关注(0)|答案(5)|浏览(184)

我知道在jQuery中,$(callback)jQuery(callback)相同,jQuery(callback)$(document).ready()具有相同的效果。
不如

jQuery(function($) {

 });

有人能给我解释一下这种函数是什么意思吗?
它是干什么的?
这个和$(callback)有什么区别?
这个和$(function())有什么区别?

8i9zcol2

8i9zcol21#

jQuery(function($) {

});

是这三个变量中最安全的一个,它把$作为局部变量,从而避免了与其他可能使用$符号的变量的冲突。
我觉得也是最近加的,不记得以前见过。
这些函数都做同样的事情--在DOM准备就绪时执行一些代码。$(document).ready(function(){})是原始函数,它与底层的javascript API匹配。
接受函数作为参数的“$”和“jQuery”是作为避免重复这种常见结构的快捷方式创建的。接受接受$作为第一个参数的函数是一种进一步的语法糖-现在您可以方便地使用闭包,而无需自己动手。

pu82cl6c

pu82cl6c2#

  • $(function())是语法错误。
  • $()创建一个空的jQuery对象。
  • $(document).ready(function() { ... })在DOM准备就绪时执行给定的函数
  • $(function() { ... })是相同内容的快捷方式
  • jQuery(function($) { ... })也是这样做的,但它也使$在函数内部可用,无论它在外部设置为什么。
6pp0gazn

6pp0gazn3#

当您调用jQuery工厂主函数(jQuery(<something>)或常用的快捷方式$(<something>))时,它会根据<something>的类型来决定要做什么。
如果您以<something>的形式传递字符串,它会假设这是一个选择器规范,并将返回与该选择器匹配的元素的jQuery列表。
如果您传递一个jQuery对象(表示一个元素列表,即从先前对jQuery的调用返回的对象),它将只返回该对象(本质上这是一个非操作)。
如果向它传递一个DOM元素,它将返回一个只包含该元素的jQuery列表(这样你就可以对那个元素应用jQuery方法)这就是$(document).ready()所发生的事情--你把DOM元素“document”传递给工厂函数,它返回一个表示那个元素的jQuery对象,并使用该对象的ready()方法将事件处理函数添加到列表中所有DOM元素的ready事件中(在本例中只有document)。
如果您向它传递一个函数,这只是“当一切准备就绪时运行它”的简写,因此$(function() { ... });等效于$(document).ready(function() { ... });

xe55xuns

xe55xuns4#

所以我在这一点上得到了纠正,如果你读了第一篇评论,它给出了一些背景。

jQuery(function() {
    // Document Ready
});

(function($) {
    // Now with more closure!
})(jQuery);

我不是100%肯定,但我认为这只是把jQuery对象传递到闭包中,我会在google上做一些挖掘,看看我是对是错,并会相应地更新。
编辑:
我说得很对,但这是直接从他们的网站上看到的:
http://docs.jquery.com/Plugins/Authoring
"我熟悉和喜爱的美元符号在哪里?它还在那里,但是为了确保您的插件不会与其他可能使用美元符号的库冲突,最佳实践是将jQuery传递给一个自执行函数(闭包),该函数将jQueryMap到美元符号,这样它就不会被其执行范围内的其他库覆盖。"

nwwlzxa7

nwwlzxa75#

首先,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()相同

相关问题