jquery中的这种书写风格正确吗?

jquery中的这种书写风格正确吗?,jquery,Jquery,我是jquery新手,很多书都告诉我全局变量是不好的,所以我想问一下下面的代码是正式的吗 $(function(){ ;(function($){ $("ul > li").addClass('emphasis'); }(jQuery)); }); 通常,您会将jQuery括起来,如下所示: $(function() { // document ready $("ul > li").addClass

我是jquery新手,很多书都告诉我全局变量是不好的,所以我想问一下下面的代码是正式的吗

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

通常,您会将jQuery括起来,如下所示:

$(function() { // document ready
  $("ul > li").addClass("emphasis");
});
然而,这个问题/答案完全是基于意见的

(function($){
  // do whatever using $

})(jQuery);  
上面的模式很好,因为它可以防止您与可能使用$variable name的其他框架发生冲突。它还为您提供了将范围包含在闭包中而不是污染全局范围的好处


此模式称为自调用闭包。

您的模式是由内而外的。将全局
jQuery
传递给as,以便将其别名为IIFE范围内的
$

;(function($) {
    // $ === jQuery inside this function regardless of noConflict of mode
    $(function(){/*...*/});
})(jQuery);
但是,在使用处理程序时,还可以使用以下语法:

;jQuery(function($) {
    //$ is an alias to jQuery in this scope even in noConflict mode
});
这使得IIFE变得不必要,因为DOM就绪处理程序接收jQuery对象作为参数

这些模式基本上是为了使您的代码能够移植到可能将
$
分配给不同于jQuery的环境中,因此即使在这些情况下,您仍然可以使用
$
安全地引用jQuery。有关更多信息:


但是,如果您在自己的站点上工作,并且没有计划包含原型或Mootools,那么您可以安全地使用
$(function(){})
,而不用担心这些模式


无论如何,我都倾向于这样做,以便更能适应未来的变化,即使覆盖
$
的可能性接近于零。在这种情况下,这主要是因为个人偏好。

您的代码没有变量(除了jQuery对象),所以。。。太过分了!您只需执行
jQuery(函数($){…})
保留
$
的值,并确保DOM已准备就绪。这是正确的,但实际上是毫无意义的。外部包装器使用$而不是jQuery,这使得内部包装器毫无意义。更不用说,在等待dom准备就绪的同时,外层包装器可以完成与内部包装器相同的目标<代码>jQuery(函数($){($(“ul>li”).addClass('emphasis');})另一方面,它不是DOM就绪处理程序?@adeneo抱歉,不确定您的意思。它与
$(文档)不同。ready
,自调用函数不会等待DOM就绪,它只保留范围中包含的
$
的值。是的,同意。代码的使用者必须意识到这一点