2012-12-23 16 views
24

Eventuali duplicati:
JavaScript Variable ScopePosso dichiarare la stessa variabile due volte in modo diverso per i loop in JavaScript?

Ho una funzione JavaScript per HTML opzioni selezionate per i 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 giorno" due volte in due diversi per loops e qual è lo scopo di questa variabile? È legale e cosa succede se dichiaro la stessa variabile due volte nella stessa funzione? (dentro per loop o fuori per loop)? Ad esempio, cosa succede se dichiaro nuovamente una delle variabili con "var"?

Se non utilizzo "var" prima della variabile day in per loop, cosa succederà?

Grazie, Uri.

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

+2

È possibile testare da soli. Basta provare e vedere cosa succede! –

risposta

25

Qualsiasi utilizzo di var foo in una funzione sarà impostato su foo per quella funzione. Non importa dove si trova la funzione in cui le dichiarazioni var vengono issate.

Altri usi di var foo nella stessa funzione sono sintatticamente legali ma non avranno alcun effetto poiché la variabile è già associata a tale funzione.

Dal momento che non ha alcun effetto, c'è una scuola di pensiero che raccomanda contro di essa (e in favore di un unico var funzione al vertice di una funzione per eseguire tutte le scoping) per evitare che implica che non v'è significato per (per i manutentori che non sono del tutto a loro agio con questa funzione di JavaScript). JSLint ti avviserà di questo utilizzo.

4

No, non dovresti. JavaScript ha scope di funzioni, non scope scope!

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