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 iframe的src动态赋值问题

新手指导插件.配合jquery使用

新手如何编写jQuery插件

重写扫雷(基于jQuery) 新手 有不足的地方敬请谅解

将点替换为逗号 jQuery(新手)

jQuery: $(document).on(event, name as selector, function [重复]