Относительно второго вопроса, JSlint рекомендует его, потому что переменные javascript всегда имеют область действия , а не область блока. Делаем это:
function func(){
var i;
alert('foo');
for(i = 0; i<3; i++){
alert(i);
}
alert(i);
}
точно (100% точно!) Так же, как:
function func(){
alert('foo');
for(var i = 0; i<3; i++){
alert(i);
}
alert(i);
}
То есть i
не ограничен (как в других языках). Вот почему jslint рекомендует ставить все переменные поверх функций, чтобы вы не запутались, думая, что есть переменные в области блока.
Уважение к первому вопросу, я с вами согласен. Я не вижу в этом большой проблемы. Но JSLint видит в этом проблему, потому что, если вы позже добавите строки в оператор if и забудете поставить фигурные скобки, у вас будет логическая ошибка, как указал Джефф.
До:
if (x > 10)
alert("it's obvious x is positive");
После некоторых изменений в коде:
if (x > 10)
alert("it's obvious x is positive");
alert("x is greater than 10"); //Logic error
Проблема, которая не возникла бы при использовании фигурных скобок.