我是jquery的新手,很多书都告诉我全局var是坏的,所以我想问下面的代码是正式的吗?
$(function(){
;(function($){
$("ul > li").addClass('emphasis');
}(jQuery));
});
答案 0 :(得分:2)
(function($){
// do whatever using $
})(jQuery);
以上是一个很好的模式,因为它可以保护您免受与可能使用$ variable名称的其他框架的冲突。它还为您提供了保持范围包含在封闭中而不是污染全局范围的好处
此模式称为自调整闭包。
答案 1 :(得分:1)
通常,您可以将jQuery包含在内:
$(function() { // document ready
$("ul > li").addClass("emphasis");
});
但是,这个问题/答案完全基于意见。
答案 2 :(得分:1)
你的模式是内在的。您将全局jQuery
传递给IIFE,并将其别名为IIFE范围内的$
:
;(function($) {
// $ === jQuery inside this function regardless of noConflict of mode
$(function(){/*...*/});
})(jQuery);
但是,当您使用DOM ready处理程序时,您也可以使用以下语法:
;jQuery(function($) {
//$ is an alias to jQuery in this scope even in noConflict mode
});
这使得IIFE成为不必要的,因为DOM就绪处理程序接收jQuery对象作为参数。
这些模式基本上是为了使您的代码可以移植到可能将$
分配给不同于jQuery的环境的环境,因此即使在这些情况下,您仍然可以使用$
安全地引用jQuery。欲了解更多信息:
但是,如果您正在自己的网站上工作并且没有计划包含Prototype或Mootools,则可以安全地使用$(function(){})
而无需担心这些模式。
我倾向于这样做,以便对未来的变化更有弹性,即使覆盖$
的几率接近于零。在这种情况下,主要是因为个人偏好。