2012-12-23 13 views
24

Powiel możliwe:
JavaScript Variable ScopeCzy mogę zadeklarować tę samą zmienną dwa razy w różnych pętlach w JavaScript?

Mam funkcji JavaScript dla HTML Wybierz opcje dniach:

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

Moje pytanie brzmi - czy mogę zadeklarować "var dzień" dwa razy w dwóch różnych pętlach i jaki jest zakres tej zmiennej? Czy to jest legalne i co się stanie, jeśli zadeklaruję tę samą zmienną dwukrotnie w tej samej funkcji? (wewnątrz dla pętli lub na zewnątrz dla pętli)? Na przykład, co się stanie, jeśli zadeklaruję jedną ze zmiennych ponownie za pomocą "var"?

Jeśli nie używam "var" w ogóle przed zmiennym dniem w pętli, co się stanie?

Dzięki, Uri.

P.S. $ .parse_int to wtyczka jQuery, która wywołuje parseInt z podstawą 10, jeśli nie jest podana.

+2

Możesz samemu sprawdzić. Po prostu spróbuj zobaczyć, co się stanie! –

Odpowiedz

25

Dowolne użycie var foo w funkcji będzie obejmować zakres foo dla tej funkcji. Nie ma znaczenia, gdzie w funkcji ma to miejsce, ponieważ deklaracje są wyciągane.

Dodatkowe zastosowania w tej samej funkcji są syntaktycznie poprawne, ale nie będą miały żadnego wpływu, ponieważ zmienna jest już określona w tej funkcji.

Ponieważ nie ma żadnego efektu, istnieje szkoła myślenia, która zaleca przeciwko niemu (i na korzyść pojedynczej funkcji var na samym szczycie funkcji, aby wykonać wszystkie zakresy), aby uniknąć sugerowania, że ​​istnieje znaczenie dla to (dla opiekunów, którzy nie są całkowicie zadowoleni z tej funkcji JavaScript). JSLint będzie ostrzegać o tym użytkowaniu.

4

Nie powinieneś. JavaScript ma zasięg funkcji, a nie zakres blokowy!

Mówię, że nie powinien, ponieważ może sugerować, że zmienna jest lokalna dla pętli/bloku, gdy tak nie jest.

Powiązane problemy