[英]Can someone explain what function($) does in jQuery
最近我正在读别人的代码,并且遇到了这个:
// Semicolon (;) to ensure closing of earlier scripting
// Encapsulation
// $ is assigned to jQuery
;(function($) {
// DOM Ready
$(function() {
...
});
})(jQuery);
我理解领先的观点;,我理解$(function(){与文档准备相同,但添加函数($)的重点是什么?
我知道它是一个闭包,但由于这个在全局范围内被调用,所以看起来你不需要为此烦恼。 $(function(){将使用相同的全局对象,不是吗?
它是为了防范某些事情,还是出于其他原因的最佳做法?
这是jQuery插件的常见结构。 它可以防止已被覆盖的$
标识符用于其他内容。 在匿名函数中, $
总是引用jQuery。
例:
$ = "oh no";
$(function() { //Big problem!
//DOM ready
});
通过引入新范围,您可以确保$
引用您期望的内容:
$ = "oh no";
(function($) { //New scope, $ is redeclared and jQuery is assigned to it
$(function() { //No problem!
//DOM ready
});
}(jQuery));
其背后的主要原因是许多其他JavaScript库使用$
作为标识符(例如PrototypeJS)。 如果你想同时使用原型和jQuery,你需要让原型有其$
标识符,但你可能不希望写出来jQuery
你要调用一个jQuery方法每次。 通过引入新的范围,你让jQuery来有其$
在执行上下文回来。
您提供的代码示例是自调用函数的示例:
(function(){
// some code…
})();
第一组括号定义了一个函数:(括在括号中的匿名函数)
(function() {})
这定义了匿名函数。 就其本身而言,它什么都不做。 但是如果在定义之后添加一组括号()
,它与用于调用函数的括号相同。 试试这个:
(function(message) {
alert(message);
})("Hello World");
这将创建一个接受参数的函数,并显示一个包含所提供值的警告框。 然后,它立即使用参数“Hello World”调用该函数。
在您的示例中,定义了一个自调用函数。 它接受一个名为$
的参数。 然后,立即调用该函数,并引用jQuery
作为参数传入。
如果您希望jQuery在noConflict()
模式下运行(这会删除对$
的全局引用),这很常见。
在noConflict()
模式下,你仍然可以通过jQuery
全局变量访问jQuery,但是大多数人宁愿使用$
,所以这个自调用函数接受全局jQuery
变量作为函数范围内名为$
的参数,您可以自由地使用自调用函数中的$
快捷方式,同时让jQuery在noConflict()模式下运行,以避免与在全局范围内使用$
其他库发生冲突。
希望这能回答你的问题!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.