JsLint 'из объема' ошибка

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

test();

Я продолжаю вытаскивать 'из объема' ошибки в своем коде JS, когда я согласовываю с JsLint, которые не имеют никакого смысла мне. Таким образом, я быстро создал пример. Есть ли что-то на самом деле неправильно с этой частью кода, поскольку переменная в конечном счете поднята к вершине функции так или иначе.

27
задан Rajat 20 March 2010 в 23:14
поделиться

2 ответа

Хотя var локализует переменную для функции и может быть поднят, большинство языков имеют область видимости блока, а не область действия функции.

Используя ключевое слово var внутри блока if, но получая доступ к переменной вне этого блока, вы создали конструкцию, которая может сбить с толку людей, не знакомых с этой особенностью JS.

Дуглас Крокфорд рекомендует использовать один оператор 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;
    // …
}
34
ответ дан 28 November 2019 в 05:26
поделиться

Код, который вы написали, работает. Это просто не очень удобно для чтения / сопровождения. Объявление переменной a внутри области if может создать ложное впечатление, что a виден только внутри этой области (которая, как показывает эта программа, является неверно - a будет виден на протяжении всей функции).

Это предупреждение JsLint побуждает вас разместить объявление в той области, где переменная фактически используется, а именно:

function test(){
  var a;
  if(true){
      a = 5;
  }
  alert(a);
}
5
ответ дан 28 November 2019 в 05:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: