2013-06-11 87 views
20

Tôi hiểu rằng đó là cú pháp tốt để sử dụng dấu chấm phẩy sau tất cả các câu lệnh trong Javascript, nhưng có ai biết tại sao if/else không yêu cầu chúng sau dấu ngoặc nhọn không?Tại sao dấu chấm phẩy không được sử dụng sau câu lệnh if/else?

+1

'while {} do' và' for() {} 'cũng có thuộc tính này. –

+0

Đây là về ngữ pháp ngôn ngữ. Bạn biết đó là gì, hãy tìm "Bảng sao kê" [ở đây] (http://www-archive.mozilla.org/js/language/grammar14.html). – acdcjunior

+0

[Khi nào tôi nên sử dụng dấu chấm phẩy sau dấu ngoặc nhọn?] (Http://stackoverflow.com/questions/2717949/when-should-i-use-a-semicolon-after-curly-braces) –

Trả lời

33
  • Dấu chấm phẩy được sử dụng để kết thúc ONE tuyên bố
  • {} bắt đầu và kết thúc một nhóm các báo cáo

Về cơ bản, một if-else phải được theo sau bởi một trong hai một tuyên bố hoặc một nhóm các câu lệnh.

if-else tiếp theo một tuyên bố:

if (condition) statement; 
if (condition); // followed by a statement (an empty statement) 

if-else tiếp theo là nhóm báo cáo:

if (condition) { 
    statement; 
    statement; 
} 

if (condition) { 
    // followed by a group of statements of zero length 
} 

if-else phải kết thúc bằng ; nếu nó được theo sau bởi một tuyên bố duy nhất. if-else không kết thúc bằng số ; khi được theo sau bởi một nhóm câu lệnh vì ; được sử dụng để kết thúc một câu lệnh và không được sử dụng để kết thúc một nhóm câu lệnh.

+0

hùng hồn đặt. – Orangepill

+0

Tôi không đồng ý với "ngay cả khi người khác phải kết thúc bằng"; Bất kỳ câu lệnh nào trong javascript không cần phải kết thúc bằng; FYI. Không có quy tắc nghiêm ngặt như vậy. – Vineeth

+0

Bất kỳ câu lệnh nào không bị chấm dứt theo ngữ cảnh (nghĩa là bằng dấu ngoặc nhọn) cần a; – Orangepill

5

Bởi vì chính các dấu ngoặc nhọn là các ký tự chấm dứt.

Các mã thông báo có kèm theo một khối câu lệnh ghép và thực chất bị chấm dứt. Nó giống như đặt dấu chấm ở cuối câu, nó báo hiệu cho trình phân tích cú pháp rằng ý nghĩ đã hoàn thành.

Trong khi hoàn toàn xấu xí, nó hợp lệ để bao bọc mọi câu lệnh trong {} và bỏ qua;

+0

Nhưng bạn có thể bỏ qua; bằng cách gói trong {} – Orangepill

+0

Chắc chắn không vượt qua js lint – FlavorScape

9

Câu trả lời thực sự là vì nhiều ngôn ngữ hiện đại đã sao chép cú pháp của chúng từ C, có thuộc tính này. JavaScript là một trong những ngôn ngữ này.

C cho phép khối tuyên bố

{ ... } 

(mà không cần phải chấm dứt phẩy) được sử dụng khi tuyên bố có thể được sử dụng. Vì vậy, bạn có thể sử dụng các khối câu lệnh như sau đó- và các mệnh đề khác, không có dấu chấm phẩy.

Nếu bạn đặt một tuyên bố đơn trong mệnh đề sau đó hoặc khác, bạn sẽ cần phải chấm dứt bằng dấu chấm phẩy. Một lần nữa, cũng giống như trong C, với JavaScript thêm twist đó; là tùy chọn ở cuối dòng, nếu chèn nó sẽ không gây ra lỗi cú pháp.

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