Posso dichiarare la stessa variabile due volte in diversi per loop in JavaScript?

Possibile duplicazione:
Scope variabile JavaScript

Ho una function JavaScript per le opzioni di selezione HTML per giorni:

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

La mia domanda è – posso dichiarare "var day" due volte in due diversi per loop e quale è la portta di questa variabile? È legale e cosa succede se dichiaro la stessa variabile due volte nella stessa function? (all'interno per i loops o all'esterno per i loops)? Ad esempio, cosa succede se dichiaro di nuovo una delle variables con "var"?

Se non uso "var" a tutti prima della giornata variabile per loop, cosa succederà?

Grazie, Uri.

PS $ .parse_int è un plugin jQuery che chiama parseInt con radix 10 se non specificato.

Qualsiasi uso di var foo in una function si foo a quella function. Non import where in questa function si svolge come le dichiarazioni di var sono sollevate.

Gli usi aggiuntivi di var foo nella stessa function sono sinotticamente legali ma non avranno alcun effetto poichè la variabile è già definita per quella function.

Poiché non ha alcun effetto, c'è una scuola di pensiero che lo consiglia (ea favore di un'unica var function al vertice di una function per eseguire tutto il path) per non implicare che vi sia un significato (ai mantenitori che non sono del tutto soddisfatti con questa caratteristica JavaScript). JSLint ti avviserà di questo utilizzo.

No, non dovresti. JavaScript ha ambito di function, non block di ambito!

Sto dicendo che non dovrebbe perché potrebbe suggerire che la variabile sia locale al loop / block quando non lo è.