我是 jquery 的新手,很多书都告诉我 global var 不好,所以我想问一下下面的代码是正式的吗?
$(function(){
;(function($){
$("ul > li").addClass('emphasis');
}(jQuery));
});
我是 jquery 的新手,很多书都告诉我 global var 不好,所以我想问一下下面的代码是正式的吗?
$(function(){
;(function($){
$("ul > li").addClass('emphasis');
}(jQuery));
});
(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.
你的模式是由内而外的。您将全局传递jQuery
给IIFE以将其别名到$
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(){})
而不必担心这些模式。
无论如何,我倾向于这样做以对未来的变化更有弹性,即使覆盖的可能性$
接近于零。在这种情况下,主要是因为个人喜好。
通常,您会像这样包含您的 jQuery:
$(function() { // document ready
$("ul > li").addClass("emphasis");
});
但是,这个问题/答案完全基于意见。