代码之家  ›  专栏  ›  技术社区  ›  Rajat

JsLint“超出范围”错误

  •  27
  • Rajat  · 技术社区  · 16 年前
    function test(){
        if(true){
            var a = 5;
        }
        alert(a);
    }
    
    test();
    

    当我检查JsLint时,我的JS代码中不断出现“超出范围”的错误,这对我来说毫无意义,所以我很快创建了一个示例。由于变量最终被提升到函数的顶部,这个代码段是否真的有什么问题。

    3 回复  |  直到 16 年前
        1
  •  34
  •   Quentin    16 年前

    虽然 var

    通过在if块内使用var关键字,但访问该块外的变量,您创建了一个对JS特性不熟悉的人可能会感到困惑的构造。

    Douglas Crockford recommends 变量 函数顶部的语句,指定应限定到该函数的所有变量。

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

    对于多个变量,您将有:

    function foo () {
        var a, b, c, d = "only d has an initial value", e;
        // …
    }
    
        2
  •  5
  •   Itay Maman    12 年前

    你写的代码正在运行。它只是不太可读/可维护。声明变量 a 在合同范围内 if 可能会给人错误的印象 只在这个范围内可见(如这个程序所示,这不是真的)- A. 将在整个功能中可见)。

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

    function test(){
      var a;
      if(true){
          a = 5;
      }
      alert(a);
    }
    
        3
  •  1
  •   kumarras    8 年前

    像JSLint和jsbin这样的在线编译器会给出警告,但它们不是错误。