В JavaScript область видимости переменных не ограничивается блоком {}
, а ограничивается только функцией. Например, переменные объявленные внутри for
или if
продолжают жить после того, как эти for
и if
отработали.
for (var i = 0; i < 10; i += 1) {
var a = i * i;
// do something
}
document.writeln(i); // 10
document.writeln(a); // 81
if (true) {
var b = "test";
// do something
}
document.writeln(b); // test
Поэтому, лучше явно обозначить это в коде.
var i, a;
for (i = 0; i < 10; i += 1) {
a = i * i;
// do something
}
var b;
if (true) {
b = "test";
// do something
}
Во многих языках программирования рекомендуется объявлять переменные как можно ближе к месту первого использования. В JavaScript все используемые в функции локальные переменные лучше объявлять в самом начале функции.
var myFunction = function () {
// Объявление всех локальных переменных, включая переменные циклов
// Код функции
}
5 комментариев:
>В JavaScript область видимости переменных >не ограничивается блоком {}, а >ограничивается только функцией.
не только, уже порядка года есть let - который тоже ограничивает область видимости
>В JavaScript все используемые в функции >локальные переменные лучше объявлять в >самом начале функции.
чем лучше? почему бы, например, не в конце? )))
>> не только, уже порядка года есть let - который тоже ограничивает область видимости
Справедливое замечание, но let появился в JavaScript 1.7 и работает пока только в Firefox 2.0 и выше. Поэксперементировать можно (и нужно), но на практике ведь не применишь.
>> чем лучше? почему бы, например, не в конце? )))
Хотя бы из соображений читаемости кода.
Во многих языках программирования рекомендуется объявлять переменные как можно ближе к месту первого использования. В JavaScript все используемые в функции локальные переменные лучше объявлять в самом начале функции.
По-моему объявление переменных как можно ближе к месту первого использования все-таки не к конкретным языками программирования имеет отношение, а к самому подходу к программированию.
Вот, допустим, я делаю рефакторинг кода и избавляюсь от какой-то его части. Внутри удаленной части использовалась какая-то локальная переменная. Из-за того что она объявлялась где-то выше по коду, я просто могу забыть о том, что она где-то объявлялась, так как в момент удаления только этот кусок кода был в фокусе моего внимания. А если она была объявлена рядом, то я наверняка бы это увидел и никаких «мертвых» переменных у меня не осталось.
>>> чем лучше? почему бы, например, не в конце?
объявление переменной в начале позволит избежать подобных ситуаций:
var x = "global";
(function f() {
alert(x); // prints "undefined"!
var x = "local";
alert(x); // prints "local"
})();
Отправить комментарий