2012-12-23 36 views
24

thể trùng lặp:
JavaScript Variable ScopeTôi có thể khai báo cùng một biến hai lần khác nhau cho các vòng trong JavaScript không?

Tôi có một hàm JavaScript cho các tùy chọn chọn HTML cho ngày:

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

Câu hỏi của tôi là - tôi có thể tuyên bố "var ngày" hai lần trong hai vòng lặp khác nhau và phạm vi của biến này là gì? Là nó hợp pháp và những gì sẽ xảy ra nếu tôi tuyên bố cùng một biến hai lần trong cùng một chức năng? (bên trong cho vòng hoặc bên ngoài cho vòng)? Ví dụ, điều gì xảy ra nếu tôi khai báo một trong các biến một lần nữa với "var"?

Nếu tôi không sử dụng "var" trước khi biến ngày trong vòng, điều gì sẽ xảy ra?

Xin cảm ơn, Uri.

P.S. $ .parse_int là một plugin jQuery gọi parseInt với radix 10 nếu không được chỉ định.

+2

Bạn có thể tự mình thử nghiệm. Chỉ cần thử và xem những gì sẽ xảy ra! –

Trả lời

25

Mọi việc sử dụng var foo trong một chức năng sẽ phạm vi foo cho chức năng đó. Nó không quan trọng ở đâu trong chức năng này diễn ra như tờ khai var được treo.

Sử dụng bổ sung var foo trong cùng chức năng là cú pháp hợp pháp nhưng sẽ không có hiệu lực khi biến đã được phạm vi cho chức năng đó.

Vì nó không có hiệu lực, nên có một trường tư tưởng đề xuất chống lại nó (và ưu tiên một hàm var ở đầu hàm để thực hiện tất cả phạm vi) để tránh ngụ ý rằng có ý nghĩa (đối với những người bảo trì không hoàn toàn thoải mái với tính năng này của JavaScript). JSLint sẽ cảnh báo bạn về cách sử dụng này.

4

Không, bạn không nên. JavaScript có phạm vi chức năng, không phạm vi khối!

Tôi nói không nên bởi vì nó có thể gợi ý rằng biến là cục bộ cho vòng lặp/khối khi nó không phải là.

Các vấn đề liên quan