Javascript JSLint-声明变量的问题

Javascript JSLint-声明变量的问题,javascript,jslint,Javascript,Jslint,以下代码通过JSLint: var sGreeting = 'hello world'; switch (sGreeting) { case 'Hello world!': var a = 'some a value'; break; case 'Kamusta mundo!': var b = 'some b value'; break; case 'Salut le Monde!': var c = 'some c value'; break

以下代码通过JSLint:

var sGreeting = 'hello world';

switch (sGreeting)
{
case 'Hello world!':
    var a = 'some a value';
    break;
case 'Kamusta mundo!':
    var b = 'some b value';
    break;
case 'Salut le Monde!':
    var c = 'some c value';
    break;
default:
    break;
}
然而,一旦我将代码放入函数中,JSLint就会抱怨我应该
组合。。。使用前面的“var”语句。
如果我遵循JSLint,我将定义可能永远不需要使用的变量我应该如何处理这个问题?下面是代码,后面是JSLint的错误:

function foo()
{
    'use strict';
    var sGreeting = 'hello world';

    switch (sGreeting)
    {
    case 'Hello world!':
        var a = 'some a value';
        break;
    case 'Kamusta mundo!':
        var b = 'some b value';
        break;
    case 'Salut le Monde!':
        var c = 'some c value';
        break;
    default:
        break;
    }
}


Error:
Problem at line 9 character 7: Combine this with the previous 'var' statement.
var a = 'some a value';

Problem at line 12 character 7: Combine this with the previous 'var' statement.
var b = 'some b value';

Problem at line 15 character 7: Combine this with the previous 'var' statement.
var c = 'some c value';

javascript中唯一的作用域是函数作用域(大括号不提供作用域),因此switch语句中的变量位于函数的顶部

jslint的建议是:

function foo() {
    'use strict';
    var a, b, c, sGreeting;

    sGreeting = 'hello world';

    switch (sGreeting) {
    case 'Hello world!':
        a = 'some a value';
        break;
    case 'Kamusta mundo!':
        b = 'some b value';
        break;
    case 'Salut le Monde!':
        c = 'some c value';
        break;
    default:
        break;
    }
}

要避免此JSLint错误,您可以

  • 一起定义所有变量

    var sGreeting='hello world',a、b、c

  • 使用JSLint指令
    允许每个函数有许多var语句


  • 原因是JavaScript没有块作用域;它只有全局和局部。JSLint并不关心全局变量在任何地方被声明,但是对于局部变量,情况就不同了。这是因为在函数中间的任何地方声明的局部变量实际上在函数中的任何地方都可用。 您应该将
    var a、b、c
    放在函数顶部,然后在switch语句中分配给它们

    至于您对定义可能永远不会使用的变量的关注,这在JavaScript中并不是一个真正的问题。在某种程度上,您实际上只是在声明,而不是定义。简单编写
    var a、b、c
    使三个变量的值
    未定义
    。事实上,你写代码的方式,你得到了同样的效果!无论如何,在函数的中间隐式声明和设置为<代码> var >代码的任何局部变量,并在函数体的顶部设置为<代码>未定义< /代码>。许多人认为,将此声明显式化是一种良好的编程实践。

    “如果我遵循JSLint,我将定义可能永远不需要使用的变量。”

    如果您按照自己的方式来做,并且忽略JSLint,那么您仍将定义可能永远不会使用的变量


    这是因为JavaScript将函数中的所有
    var
    声明视为发生在函数顶部,即使您认为您是在某些条件逻辑中声明变量,例如在特定的
    案例中(或
    if
    for
    或其他内容)。这叫做“吊装”。然后,在代码中进行赋值的地方,实际值被赋值给变量。也就是说,“highed”变量最初得到一个未定义的值,然后在代码中有
    var a=“something”的地方得到将分配该值


    因此,正如其他答案所说,您可以通过在函数顶部声明变量(用单个
    var
    语句分隔逗号),让代码通过JSLint,然后在您喜欢的任何点分配值。

    使用来安静地允许使用
    var

    该链接只会给我一个404。很难找到旧版本JSLint的引用,所以我将其保留在这里:
    /*JSLint vars:true*/