while sintaxis para for ejemplos ejemplo ciclo bucle javascript variables var declare

sintaxis - para en javascript



¿Puedo declarar la misma variable dos veces en diferentes bucles en JavaScript? (2)

Posible duplicado:
Alcance de variable de JavaScript

Tengo una función de JavaScript para las opciones de selección de HTML por días:

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

Mi pregunta es: ¿puedo declarar "día var" dos veces en dos bucles diferentes y cuál es el alcance de esta variable? ¿Es legal y qué ocurre si declaro la misma variable dos veces en la misma función? (dentro para bucles o fuera para bucles)? Por ejemplo, ¿qué sucede si declaro una de las variables nuevamente con "var"?

Si no uso "var" antes del día variable para los bucles, ¿qué sucederá?

Gracias, Uri.

PS $ .parse_int es un plugin jQuery que llama a parseInt con radix 10 si no se especifica.


Cualquier uso de var foo en una función se extenderá a esa función. No importa en qué lugar de la función tenga lugar ya que las declaraciones de var son izadas.

Los usos adicionales de var foo en la misma función son sintácticamente legales, pero no tendrán efecto ya que la variable ya tiene un alcance para esa función.

Como no tiene ningún efecto, existe una escuela de pensamiento que recomienda no hacerlo (y a favor de una única función de var en la parte superior de una función para llevar a cabo todo el alcance) para evitar implicar que tiene importancia (para los mantenedores). que no están del todo cómodos con esta característica de JavaScript). JSLint lo alertará sobre este uso.


No, no deberías. JavaScript tiene el alcance de la función, ¡no el alcance del bloque!

Estoy diciendo que no debería porque podría sugerir que la variable es local para el ciclo / bloque cuando no lo es.