jquery中的这种书写风格正确吗?
我是jquery新手,很多书都告诉我全局变量是不好的,所以我想问一下下面的代码是正式的吗jquery中的这种书写风格正确吗?,jquery,Jquery,我是jquery新手,很多书都告诉我全局变量是不好的,所以我想问一下下面的代码是正式的吗 $(function(){ ;(function($){ $("ul > li").addClass('emphasis'); }(jQuery)); }); 通常,您会将jQuery括起来,如下所示: $(function() { // document ready $("ul > li").addClass
$(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就绪,它只保留范围中包含的$
的值。是的,同意。代码的使用者必须意识到这一点