我可以在JavaScript的不同for循环中声明两次相同的变量吗?

时间:2012-12-23 10:13:22

标签: javascript variables var declare

  

可能重复:
  JavaScript Variable Scope

我有一个用于日期HTML选项的JavaScript函数:

// 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);
}

我的问题是 - 我可以在两个不同的for循环中两次声明“var day”,这个变量的范围是什么?这是合法的,如果我在同一个函数中声明两次相同的变量会发生什么? (内部循环或外部循环)?例如,如果我再次使用“var”声明其中一个变量会发生什么?

如果我在for循环中的变量日之前根本不使用“var”,会发生什么?

谢谢, URI。

P.S。 $ .parse_int是一个jQuery插件,如果没有指定,它会调用基数为10的parseInt。

2 个答案:

答案 0 :(得分:27)

在函数中使用var foofoo范围扩展到该函数。

var在同一函数中的其他用法在语法上是合法的,但由于变量已经作用于该函数,因此无效。

由于它没有任何效果,因此有一种思想建议反对它(并且支持在函数的最顶部使用单个var foo函数来执行所有范围)以避免暗示那里对它来说很重要(对于不熟悉这个JavaScript特性的维护者而言)。 JSLint会提醒您注意这种用法。

答案 1 :(得分:4)

不,你不应该。 JavaScript具有函数范围,而不是块范围!

我说不应该,因为它可能表明变量在循环/块中是本地的,而不是。