2012-01-09 33 views
8

Theo số ECMAScript 5.1 spec, mục 12.12, bất kỳ câu lệnh nào đều có thể được dán nhãn - và trong một thử nghiệm ngắn, trình duyệt của tôi đã chấp nhận nhãn trước khi có bất kỳ tuyên bố nào. Thông số cũng nêu rõ rằng các nhãn được sử dụng độc quyền với các tuyên bố breakcontinue và một thử nghiệm nhanh cho thấy rằng các báo cáo đó đưa ra lỗi "nhãn không xác định" nếu nhãn mà chúng tham chiếu không tham chiếu đến vòng lặp chứa chúng.Nhãn được sử dụng với các câu lệnh không phải là vòng lặp như thế nào?

Vì vậy, câu hỏi của tôi là: nhãn cho báo cáo không phải là vòng được sử dụng để làm gì? Có một số ngữ cảnh trong đó break hoặc continue có thể tham chiếu đến nhãn không phải là vòng lặp không?

+2

Không phải là bản dupe, mà là một câu hỏi thú vị, có liên quan và gần đây - với một số câu trả lời có liên quan một chút: http://stackoverflow.com/questions/8782877/using-colons-in-javascript-variable-names- eg-abc – ziesemer

+1

haha, vâng, tôi chỉ đọc nó. Đó là điều khiến tôi hỏi điều này. –

Trả lời

6

Rõ ràng break và continue báo cáo có thể được sử dụng trong bất kỳ tuyên bố:

http://docstore.mik.ua/orelly/webprog/jscript/ch06_11.htm

Trong đó trường hợp thứ như thế này trở thành quy phạm pháp luật:

function show_alert() 
{ 
    label: 
    { 
     break label; 
     alert("Hello! I am an alert box!"); 
    } 
    alert("hi"); 
} 

Khi show_alert() được gọi, chỉ cảnh báo "hi" được hiển thị.

Theo như tôi biết, đây là việc sử dụng duy nhất {} các khối mã, khác với kiểu mã. (có một câu hỏi ở đây về điều đó, và không ai có thể đưa ra bất cứ điều gì khác ngoài khả năng đọc, nhưng tôi không thể tìm thấy nó bây giờ ...)

+0

http://stackoverflow.com/questions/8735841/whats-the-purpose-of-lonely-code-blocks-in-javascript/8735997#8735997 –

+0

Đó là một, nhờ @cwolves – Jeff

+0

Câu trả lời hay, cảm ơn. Nhưng tôi không chấp nhận nó là hoàn chỉnh (chưa), vì nó không giải thích tại sao bạn có thể gắn nhãn các câu lệnh không chặn (ví dụ 'start: var a = 1;'). –

0

Có bạn có thể gắn nhãn bất kỳ tuyên bố nào. Bạn chỉ cần đặt câu lệnh trong dấu ngoặc nhọn, tức là

{start:var a=1;} 

điều này sẽ không hiển thị lỗi nhãn không xác định.

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