首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSLint代码质量工具

JSLint代码质量工具
EN

Stack Overflow用户
提问于 2011-05-01 16:35:35
回答 6查看 707关注 0票数 2

因此,我使用以下代码检查了我的javascript:http://www.jslint.com/

如果我没有在{ }之间包装IF/FOR语句,就会得到如下“错误”:

第152行出现问题,字符27:预期的'{‘,而不是看到’重置()‘。

或者,如果我在内部初始化变量,我得到:

第154行(字符19)的问题:将'var‘声明移到函数的顶部。

为什么这些被认为是错误?这些不应该被认为是好的实践,因为它们实际上减少了代码的大小,对于javascript来说,这甚至比代码的速度更重要?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-05-01 16:39:16

对于if语句错误,缺少开口支撑被认为是错误的做法,因为它会使维护更加困难。例如,如果您想在If语句中添加另一条语句,那么无论如何您都需要添加大括号,所以只在一开始就包含它们就更容易了。

第二个错误,我发现有点..。固执己见,因为就我个人而言,我更喜欢声明变量更接近使用它们的位置,而不是在函数的顶部。

就我个人而言,我现在更喜欢使用JSHint,因为我发现Crockfords对正确的代码不太了解,而更多的是关于JavaScript应该是什么样子的意见,其他人的意见都是该死的。

票数 10
EN

Stack Overflow用户

发布于 2011-05-01 16:42:25

JSLint建议您用大括号包装if和for语句,因为如果缩进不小心,可能会导致很难跟踪错误。例如:

代码语言:javascript
复制
if (somecondition)
    step1();
    step2();

从缩进来看,只有当step1()和step2()为true时才会执行,但实际上,由于缺少大括号,step2()将始终运行。

如果您真的关心文件大小,我建议您研究一下JS压缩器,比如yuicompressor。其中大多数将移除不需要它们的if/for语句周围的大括号。然后,您可以拥有这两个世界中的最好的:可读的代码和小的文件大小,当它服务时。

票数 4
EN

Stack Overflow用户

发布于 2011-05-01 16:44:42

关于第二个问题,JSlint推荐它,因为javascript vars总是函数作用域的,而不是块作用域。这样做:

代码语言:javascript
复制
function func(){
  var i;
  alert('foo');
  for(i = 0; i<3; i++){
     alert(i);
  }
  alert(i);
}

是准确的(100%准确!)与以下相同:

代码语言:javascript
复制
function func(){
  alert('foo');
  for(var i = 0; i<3; i++){
     alert(i);
  }
  alert(i);
}

因此,i不是用于范围的(就像在其他语言中一样)。这就是为什么jslint建议将所有的vars放在函数的顶部,这样您就不会觉得存在块作用域变量了。

尊重第一个问题,我同意你的意见。我不认为这是个大问题。但是JSLint认为这是一个问题,因为如果稍后在if语句中添加行,忘记放置大括号,就会出现逻辑错误,正如杰夫所指出的。

在此之前:

代码语言:javascript
复制
if (x > 10)
    alert("it's obvious x is positive");

在对代码进行了一些更改之后:

代码语言:javascript
复制
if (x > 10)
    alert("it's obvious x is positive");  
    alert("x is greater than 10");  //Logic error

一个用花括号就不会发生的问题。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5849729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档