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