这种写作风格在jquery中是正确的吗?

时间:2013-07-09 00:27:45

标签: jquery

我是jquery的新手,很多书都告诉我全局var是坏的,所以我想问下面的代码是正式的吗?

   $(function(){
        ;(function($){
            $("ul > li").addClass('emphasis');
        }(jQuery));     
   }); 

3 个答案:

答案 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(){})而无需担心这些模式。

我倾向于这样做,以便对未来的变化更有弹性,即使覆盖$的几率接近于零。在这种情况下,主要是因为个人偏好。