我知道像$(function( $ )
这样的代码没有任何意义,但我在不同的地方找到了这种代码,包括todomvc。
编写像jQuery(function( $ )
这样的函数来解决任何其他库使用的$
的潜在冲突,而不是$function($)
。
答案 0 :(得分:3)
没用了
此表格根本没用:
$(function($) {
});
只有在没有其他库可以覆盖$
(例如原型)时,它才会起作用。
如何有用
由于jQuery将自己作为DOM ready事件处理函数的第一个参数传递,因此您可以充分利用它:
jQuery(function($) {
// this === document
// $ === jQuery
});
此行为的proof也可以在the source中找到:
readyList.resolveWith( document, [ jQuery ] );
它将this
映射到document
,将您的就绪函数的第一个参数映射到jQuery
。代码看起来有点不明显的原因是因为ready事件是使用Deferred
处理的。
等效
有点相同的表示法是这样的:
(function($) {
$(function() {
}
}(jQuery));
如果你在就绪处理程序之外做更多的事情,这将是首选,这实际上比你想象的更频繁。
答案 1 :(得分:3)
没有理由使用
$(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.
答案 2 :(得分:2)
有很多方法可以在DOM准备好时为DOM初始化jQuery脚本。流行的方法是:
$(document).ready(function(){});
同样的简写是:
$(function(){});
$()
与jQuery()
之争!由于询问jQuery
与$
的原因,原因是大多数库使用$
作为访问库中函数的较短方式。说,MooTools和Prototype JS。因此,为避免冲突,他们可能会将$
替换为jQuery
。
jQuery有一个名为jQuery.noConflict();
的函数,它放弃了jQuery对$
变量的控制,使$
不能与jQuery一起使用。希望这能解决你的问题。
在Prototype.JS documentation中,$
符号返回文档中具有匹配ID的元素;否则返回传递的元素。
此外,$
功能是Prototype的基石。它不仅为document.getElementById
提供了一个方便的别名,它还允许您将无差别的ID(字符串)或DOM节点引用传递给您的函数。
$
作为参数的问题...... 没有人使用:
$(function($){})
要么是
(function($){})(jQuery);
或
$(function(){});
请检查。 :)
答案 3 :(得分:1)
写$(function(){})
的大多数人都是因为他们是用户而这样做。即他们选择使用jquery而不是任何冲突的库。因此使用它是安全的。
答案 4 :(得分:1)
$(function( $ )
是
的简写$(document).ready(function() {
你是对的:Jquery(function( $ )
用于与jquery和其他js库发生冲突的事件
答案 5 :(得分:1)
是的,因为您可能知道原型也使用$
所以这里jQuery
变得很好,这使我们可以使用jQuery,即使$被其他lib保留。
答案 6 :(得分:0)
这是解决$
的潜在冲突的更好方法:
(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。
答案 7 :(得分:0)
$(function() {
// Do your code here...
});
确保完整下载文档和脚本。
(function($){
// Do your code here...
})(jQuery);
允许在函数中使用$符号而不会与其他库发生冲突,这些库赋予$ symbol不同的含义。
所以你可以同时使用上述两个。
(function($){
$(function() {
// Do your code here...
});
})(jQuery);
答案 8 :(得分:0)
别名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)
您可能希望阅读this。
答案 9 :(得分:0)
你的问题不明确。传递JQuery
对象使其本地作用域(据我所知,对模块)。它被用作性能增强。
(function($) {
// Code in here
})(jQuery);