当前位置: 首页 > 知识库问答 >
问题:

在JavaScript中,我可以在不同的for循环中声明同一个变量两次吗?[副本]

章昊
2023-03-14

可能重复:
JavaScript变量作用域

我有一个用于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循环中的variable day之前根本不使用“var”,会发生什么?

谢谢,乌里。

附注。$.parse_int是一个jQuery插件,如果未指定,它将调用基数为10的parseInt。

共有2个答案

卫彭亮
2023-03-14

不,你不应该。使用var声明的变量具有函数作用域,而不是块作用域!

使用var重新声明一个变量可能暗示该变量是循环/块的本地变量,但它不是循环/块的本地变量。

但是,您可以使用let声明变量,以确保它是块范围的。

null

js prettyprint-override">for (let x = 1; x <= 3; x++) {
   console.log(x)
}
    
for (let w = 65, x = String.fromCharCode(w); w <= 67; w++, x = String.fromCharCode(w)){
    console.log(x)
}

console.log(typeof x) // undefined
王辉
2023-03-14

在函数中使用var foofoo作用于该函数。当var声明被挂起时,这在函数的哪个位置发生并不重要。

在同一函数中额外使用var foo在语法上是合法的,但不会有任何效果,因为变量的作用域已经限定在该函数中。

由于它没有效果,所以有一种观点反对它(支持在函数的顶部使用一个var函数来执行所有作用域),以避免暗示它有意义(对于不完全适应JavaScript这个特性的维护人员)。JSLint将提醒您注意这种用法。

 类似资料:
  • 问题内容: 在循环内部声明变量是否不好?在我看来,这样做,如下面的第一个代码块所示,将使用第二次的十倍的内存…由于在循环的每次迭代中都创建了一个新的字符串。这样对吗? 与 问题答案: 在循环内部声明变量是否不好? 一点也不!它将变量本地化到其使用点。 在我看来,如下面的第一个代码块所示,这样做将使用十倍于第二个内存的内存。 编译器可以优化内容以保持内存使用效率。仅供参考:如果您使用关键字告诉您变量

  • 在C语言中,不能在“case”语句中声明任何变量。 但是,当您与花括号一起使用时,您可以使用。 在Javascript案例中,我可以直接在案例语句内部使用var吗? 似乎没有错误,但我不相信这是语法上的OK。

  • 我如何通过for循环的每次迭代声明一个新变量? 例如: 循环完成后,我想要4个变量,分别名为、、和,每个变量分别设置为、、和(当我在上面的代码中将设置为时,我实际上是将其设置为,因为这是在整个特定迭代中的值

  • 问题内容: 是否可以使用Golang一次声明多个变量? 例如,在Python中,您可以输入以下内容: 所有值均为80。 问题答案: 是的你可以: 您可以对内联分配执行类似的操作,但不太方便:

  • 问题内容: 我有以下程序。 执行后,我得到: 我们可以看到,已经执行了2次。但是,如果我稍作修改,例如: 我将收到错误“左侧没有新变量”。为什么这个? 问题答案: 这里有几件事。首先,让我们解决您问题的下半部分。 声明变量的默认方法是使用关键字,然后由运算符分配给它。 Go为我们提供了一个快捷方式,既可以声明变量也可以分配值 在您的示例中,当您第二次使用时,您试图重新声明一个在相同作用域内命名的新

  • 问题内容: ja块变量还是局部变量?我看到j的作用域只是直到for循环结束 问题答案: 局部变量在方法,构造函数或块中声明。 由此可见, 所有块变量都是局部变量。 按照块的定义 块是平衡括号之间的一组零个或多个语句,可以在允许单个语句的任何地方使用。 所以 无论在块内声明什么变量,范围都限于该块。 因此范围仅限于该块内部。那是循环。