function test(){
if(true){
var a = 5;
}
alert(a);
}
test();
Я продолжаю вытаскивать 'из объема' ошибки в своем коде JS, когда я согласовываю с JsLint, которые не имеют никакого смысла мне. Таким образом, я быстро создал пример. Есть ли что-то на самом деле неправильно с этой частью кода, поскольку переменная в конечном счете поднята к вершине функции так или иначе.
Хотя 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;
// …
}
Код, который вы написали, работает. Это просто не очень удобно для чтения / сопровождения. Объявление переменной a
внутри области if
может создать ложное впечатление, что a
виден только внутри этой области (которая, как показывает эта программа, является неверно - a
будет виден на протяжении всей функции).
Это предупреждение JsLint побуждает вас разместить объявление в той области, где переменная фактически используется, а именно:
function test(){
var a;
if(true){
a = 5;
}
alert(a);
}