Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JsLint';超出范围';错误_Javascript_Jslint - Fatal编程技术网

Javascript JsLint';超出范围';错误

Javascript JsLint';超出范围';错误,javascript,jslint,Javascript,Jslint,当我使用JsLint检查时,我的JS代码中不断出现“超出范围”的错误,这对我来说毫无意义。因此我很快创建了一个示例。由于变量最终被提升到函数的顶部,此代码段是否确实有问题。当var将变量定位到函数并进行提升时,大多数语言都有块作用域而不是函数作用域 通过在if块内使用var关键字,但在该块外访问变量,您创建了一个可能会让不熟悉JS特性的人感到困惑的构造 在函数顶部使用一个var语句,该语句指定应限定于该函数的所有变量 function test(){ if(true){

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

var
将变量定位到函数并进行提升时,大多数语言都有块作用域而不是函数作用域

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

在函数顶部使用一个
var
语句,该语句指定应限定于该函数的所有变量

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

test();
对于多个变量,您将有:

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

test();

您编写的代码正在运行。它只是不太可读/可维护。如果将变量
a
声明在
if
的范围内,可能会给人一种错觉,认为
a
仅在此范围内可见(如本程序所示,这是不正确的-
a
将在整个函数中可见)

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

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

Javascript具有函数作用域而不是块作用域。因此,在if函数内声明的变量在if块外和声明if语句的函数内可见和可访问


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

这可能是一个输入错误,应该是
var a=null
。为什么要将其定义为null呢?不需要。它仍然可以声明为
var afunction test(){
  var a;
  if(true){
      a = 5;
  }
  alert(a);
}