我知道类似的代码$(function( $ )
没有任何意义,但是我在包括todomvc在内的各个地方都找到了这种代码。
jQuery(function( $ )
编写函数喜欢解决$
任何其他库使用的任何潜在冲突是有原因的,但不是$function($)
.
我知道类似的代码$(function( $ )
没有任何意义,但是我在包括todomvc在内的各个地方都找到了这种代码。
jQuery(function( $ )
编写函数喜欢解决$
任何其他库使用的任何潜在冲突是有原因的,但不是$function($)
.
没有理由使用
$(function($))...
如果你在行的开头使用美元符号,你就认为它是一个 jQuery 对象,所以如果你稍后将 jQuery 对象作为参数传递以避免冲突,你为什么不首先使用它呢?现在说这些也太晚了……
使用它的正确方法是:
(function($){ // The dollar variable is a parameter.
$(function(){ // You use the $ variable only inside the function.
});
})(jQuery); // jQuery is passed as a parameter.
$.somePrototypeFunctionHere(); // Here the dollar variable can be something else.
没用的
这种形式根本没有用:
$(function($) {
});
只有当没有其他库可以覆盖$
(例如原型)时,它才会起作用。
它如何有用
由于 jQuery 将自身作为第一个参数传递给 DOM 就绪事件处理函数,因此您可以通过以下方式充分利用它:
jQuery(function($) {
// this === document
// $ === jQuery
});
readyList.resolveWith( document, [ jQuery ] );
它映射this
到document
您的 ready 函数的第一个参数和jQuery
. 代码看起来有点不明显的原因是因为 ready 事件是使用Deferred
.
等效的
有点等价的符号是这样的:
(function($) {
$(function() {
}
}(jQuery));
如果您在准备好的处理程序之外做更多的事情,这将是首选,这实际上比您想象的更频繁地发生。
当 DOM 准备就绪时,您可以通过多种方式为 DOM 初始化 jQuery 脚本。流行的方法是:
$(document).ready(function(){});
同样的简写是:
$(function(){});
$()
对战jQuery()
!出于询问jQuery
vs.$
的原因,原因是大多数库$
用作访问库中函数的更短的方式。比如说,MooTools 和 Prototype JS。因此,为避免冲突,它们可能会替换$
为jQuery
.
jQuery 有一个名为的函数jQuery.noConflict();
,它放弃了 jQuery 对$
变量的控制,使$
jQuery 无法工作。希望这可以解决您的问题。
在 Prototype.JS文档中,该$
符号返回文档中具有匹配 ID 的元素;否则返回传递的元素。
此外,$
功能是 Prototype 的基石。它不仅为 提供了一个方便的别名document.getElementById
,它还允许您将 ID(字符串)或 DOM 节点引用无差别地传递给您的函数。
$
作为参数的问题...没有人使用:
$(function($){})
它是
(function($){})(jQuery);
或者
$(function(){});
请检查。:)
$(function( $ )
是简写
$(document).ready(function() {
你是对的: Jquery(function( $ )
在可能与 jquery 和其他 js 库发生冲突的情况下使用
大多数写作的人$(function(){})
都这样做是因为他们是用户。即他们选择使用jquery 而不是任何有冲突的库。因此使用它是安全的。
这是解决以下任何潜在冲突的更好方法$
:
(function($){
$(function(){
// all the code stuff here....
});
})(jQuery);
您的编辑:
My question is actually misunderstood by many giving answers. I want to know about the dollar as an argument in the function.
这只是为了保护$
符号的简写,jQuery
并且还有许多其他库也使用该$
符号,因此经常有机会遇到麻烦。
从文档中阅读此处:
将 jQuery 传递给将其映射到美元符号的 IIFE(立即调用函数表达式)是一种最佳实践,因此它不能在其执行范围内被另一个库覆盖。
(function($) {
// all other things
})(jQuery);
现在在这个闭包中,我们可以随意使用美元符号代替 jQuery。
更多在这里阅读
你的问题不清楚。传递JQuery
对象使其成为本地范围(据我所知,对于模块)。它被用作性能增强。
(function($) {
// Code in here
})(jQuery);
给 jQuery 命名空间起别名
当使用另一个 JavaScript 库时,我们可能希望调用$.noConflict()
以避免命名空间困难。调用此函数时,$
快捷方式不再可用,迫使我们jQuery
每次正常写时都要写$
。但是,传递给.ready()
方法的处理程序可以接受一个参数,该参数传递给全局jQuery
对象。这意味着我们可以在.ready()
处理程序的上下文中重命名对象,而不会影响其他代码:
jQuery(document).ready(function($) {
// Code using $ as usual goes here.
});
这是在 DOM 完全加载时指定要执行的函数的其他方法。它可以在 jQuery 中以三种方式完成 -
以下所有三种语法都是等效的:
jQuery(document).ready(function($){})
jQuery().ready(function($){}) //(this is not recommended)
jQuery(function($){})
解决冲突的另一种方法是 -
(function($) { /* some code that uses $ */ })(jQuery)
您可能喜欢阅读此内容。
$(function() {
// Do your code here...
});
确保文档和脚本已完全下载。
(function($){
// Do your code here...
})(jQuery);
允许在函数中使用 $ 符号,而不会与其他库冲突,这赋予 $ 符号不同的含义。
因此,您可以同时使用上述两种方法。
(function($){
$(function() {
// Do your code here...
});
})(jQuery);