Подтвердить что ты не робот

Могу ли я объявить одну и ту же переменную дважды в разных циклах в JavaScript?

Возможный дубликат:
Область видимости JavaScript

У меня есть функция JavaScript для вариантов выбора HTML для дней:

// Show and hide days according to the selected year and month.
function show_and_hide_days(fp_form) {
    var select_year= $(fp_form).find("select.value_year");
    var select_month= $(fp_form).find("select.value_month");
    var select_day= $(fp_form).find("select.value_day");
    var selected_year= $.parse_int($(select_year).val());
    var selected_month= $.parse_int($(select_month).val());
    var selected_day= $.parse_int($(select_day).val());
    var days_in_month= new Date(selected_year, selected_month, 0).getDate();
    // If the number of days in the selected month is less than 28, change it to 31.
    if (!(days_in_month >= 28))
    {
        days_in_month= 31;
    }
    // If the selected day is bigger than the number of days in the selected month, reduce it to the last day in this month.
    if (selected_day > days_in_month)
    {
        selected_day= days_in_month;
    }
    // Remove days 29 to 31, then append days 29 to days_in_month.
    for (var day= 31; day >= 29; day--)
    {
        $(select_day).find("option[value='" + day + "']").remove();
    }
    for (var day= 29; day <= days_in_month; day++)
    {
        $(select_day).append("<option value=\"" + day + "\">" + day + "</option>");
    }
    // Restore the selected day.
    $(select_day).val(selected_day);
}

Мой вопрос: могу ли я объявить "var day" дважды в двух разных циклах и какова область действия этой переменной? Является ли это законным и что происходит, если я объявляю одну и ту же переменную дважды в одной и той же функции? (внутри для петель или снаружи для петель)? Например, что произойдет, если я снова объявлю одну из переменных с помощью "var"?

Если я вообще не использую "var" до переменного дня в циклах, что произойдет?

Спасибо, Uri.

P.S. $.parse_int - это плагин jQuery, который вызывает parseInt с radix 10, если не указан.

4b9b3361

Ответ 1

Любое использование var foo в функции будет областью foo для этой функции. Не имеет значения, где в функции это происходит, когда объявления var поднимаются.

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

Поскольку это не имеет никакого эффекта, есть школа мысли, которая рекомендует против нее (и в пользу единственной var функции в самом верху функции для выполнения всех областей охвата), чтобы не подразумевать, что имеет значение (для тех, кто не совсем удовлетворяет этой особенности JavaScript). JSLint предупредит вас об этом использовании.

Ответ 2

Нет, не стоит. JavaScript имеет область действия, а не область блока!

Я говорю не потому, что может предположить, что переменная является локальной для цикла/блока, когда это не так.