在这里使用它对我来说是完全有意义的.会有什么选择?我怎么能完全避免使用它们,最重要的是根据jsLint使用全局变量的原因.
(function($){
$(function(){
$body = $('body'); //this is the BAD Global
$.each(somearray ,function(){ $body.dosomething() });
if (something){
$body.somethingelse();
}
});
}(jQuery));
Run Code Online (Sandbox Code Playgroud)
你能帮我理解一下吗?并给我一个更好的解决方案?
Aar*_*lla 19
Globals很糟糕,因为它们不会立即引起问题.只是到了之后,在你到处使用它们之后,它们将导致非常难看的问题 - 如果不从头开始编写代码,你就无法解决这些问题.
示例:您用于$body定义一些函数.这很好.但最终,你还需要一个价值.所以你用$body.foo.工作良好.然后你添加$body.bar.然后,几周后,您需要另外一个值,以便添加$body.bar.
你测试代码,它似乎工作.但事实上,你已经"添加"了两次相同的变量.这不是问题,因为JavaScript不理解"一次创建一个新变量"的概念.它只知道"创建,除非它已经存在".所以你使用你的代码,最终,一个函数将修改$body.bar破坏另一个函数.即使找到问题也会花费你很多时间.
这就是为什么最好确保变量只能在需要的基础上看到.这样,一个功能不能打破另一个功能.随着代码的增长,这变得更加重要.