JSLint背后有什么原因说"var语句太多"

slo*_*ife 63 javascript refactoring jslint

JSLint(打开onevar标志)正在标记我的一些javascript代码,其中包含以下内容:

Problem at line 5 character 15: Too many var statements.

我很乐意解决这些错误,但我想知道,我是为了性能而做,还是因为这只是一种不好的做法,并且更有可能在我的javascript代码中引入错误.onevar旗帜背后的原因是什么?

我确实查看了var关键字的JSLint文档,但没有具体说明为什么同一函数中的多个var语句都不好.

这是一个例子的尝试.解释代码如何只从1个var语句中受益:

function Test(arg) {
   var x = arg + 1,
       y = cache.GetItem('xyz');
   if (y !== null) {
      // This is what would cause the warning in JSLint
      var request = ajaxPost(/* Parameters here */);

   }
}
Run Code Online (Sandbox Code Playgroud)

swa*_*ohn 98

Javascript没有块范围.在其他语言中(如c),如果在if语句中声明一个变量,则不能在它之外访问它,但在javascript中你可以.JSLint的作者认为这是一种不好的做法,因为你(或其他读者)可能会感到困惑并认为你不能再访问变量,但实际上你可以.因此,您应该在函数顶部声明所有变量.

  • 这回答了为什么一个人应该在函数的顶部声明所有`VAR'的问题,但是关于"一个`VAR`语句"与"多个`VAR"语句的关系是什么(全部在顶部) )".有没有*好*的原因,或只是"它节省打字,所以为什么不"的事情? (7认同)

Elz*_*ugi 28

官方原因在于道格拉斯·克罗克福德.

报价:

在许多语言中,块引入了范围.块中引入的变量在块外部不可见.

在JavaScript中,块不引入范围.只有功能范围.函数中任何位置引入的变量在函数中的任何位置都可见.JavaScript的块会让有经验的程序员感到困惑并导致错误,因为熟悉的语法会产生错误的承诺.

JSLint期望具有函数的块,if,switch,while,for,do和try语句以及其他任何地方.

在具有块范围的语言中,通常建议在首次使用的站点声明变量.但是因为JavaScript没有块范围,所以在函数顶部声明所有函数的变量是明智的.建议每个函数使用一个var语句.这可以通过vars选项拒绝.


小智 6

只需在一个地方宣布你的变种:

var request,x,y;
Run Code Online (Sandbox Code Playgroud)