JsLint'超出范围'错误

时间:2010-03-20 23:14:54

标签: javascript jslint

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

test();

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

3 个答案:

答案 0 :(得分:34)

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

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

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

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;
    // …
}

答案 1 :(得分:5)

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

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

a

答案 2 :(得分:1)

Javascript具有功能范围而不是块范围。因此,如果函数是可见的,并且在if块之外和在声明if语句的函数内可访问,则在内部声明的变量。

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