JsLint'超出范围'错误

Raj*_*jat 27 javascript jslint

function test(){
    if(true){
        var a = 5;
    }
    alert(a);
}

test();
Run Code Online (Sandbox Code Playgroud)

当我用JsLint检查时,我在JS代码中不断出现"超出范围"的错误,这对我来说毫无意义.所以我很快就创建了一个例子.这段代码是否存在实际问题,因为变量最终会被提升到函数的顶部.

Que*_*tin 34

虽然var将变量本地化为函数并且需要提升,但大多数语言都具有块范围而不是函数范围.

通过在if块中使用var关键字,但访问该块之外的变量,您已经创建了一个可能让那些不熟悉JS特性的人感到困惑的构造.

Douglas Crockford建议var在函数顶部使用单个语句,该语句指定应该作用于该函数的所有变量.

function test(){
    var a;
    if(true){
        a = 5;
    }
    alert(a);
}

test();
Run Code Online (Sandbox Code Playgroud)

使用多个变量,您将拥有:

function foo () {
    var a, b, c, d = "only d has an initial value", e;
    // …
}
Run Code Online (Sandbox Code Playgroud)

  • 道格拉斯·克罗克福德(Douglas Crockford)推荐*很多东西......就像任何工具一样,你应该总是把JSLint的建议带到一边,并为你/你的团队量身定做.如果团队中的每个人都了解JS变量作用域的工作原理,那么您应该忽略Crockford关于将"var"语句放在何处的建议. (14认同)

Ita*_*man 5

您编写的代码正在运行.它不是非常易读/可维护.a在范围内声明变量if可能会给出a只在此范围内可见的错误印象(正如此程序所示,这不是真的 - a将在整个函数中可见).

此JsLint警告鼓励您将声明放在实际使用变量的确切范围内,如下所示:

function test(){
  var a;
  if(true){
      a = 5;
  }
  alert(a);
}
Run Code Online (Sandbox Code Playgroud)

  • 为什么将它定义为null呢? (4认同)