-3

我是 jquery 的新手,很多书都告诉我 global var 不好,所以我想问一下下面的代码是正式的吗?

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

3 回答 3

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

})(jQuery);  

The above is a good pattern since it protects you against conflicts with other frameworks that might use the $ variable name. It also gives you the benefit of keeping scope contained to the closure instead of polluting the global scope

This pattern is called a self calling closure.

于 2013-07-09T00:31:01.403 回答
1

你的模式是由内而外的。您将全局传递jQueryIIFE以将其别名到$IIFE 范围内:

;(function($) {
    // $ === jQuery inside this function regardless of noConflict of mode
    $(function(){/*...*/});
})(jQuery);

但是,当您使用DOM 就绪处理程序时,您也可以使用以下语法:

;jQuery(function($) {
    //$ is an alias to jQuery in this scope even in noConflict mode
});

这使得 IIFE 变得不必要,因为 DOM 就绪处理程序接收 jQuery 对象作为参数。

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


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

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

于 2013-07-09T00:48:32.270 回答
1

通常,您会像这样包含您的 jQuery:

$(function() { // document ready
  $("ul > li").addClass("emphasis");
});

但是,这个问题/答案完全基于意见。

于 2013-07-09T00:29:45.320 回答