2012-06-28 33 views
10

Tôi không thể nhớ ở đâu, nhưng gần đây tôi đã thông qua một nhận xét nơi người dùng nói rằng 1TBS được ưu tiên hơn Allman trong JavaScript và Allman nói có ý nghĩa nguy hiểm trong JavaScript.Tác động nguy hiểm của phong cách Allman trong JavaScript

Đây có phải là tuyên bố hợp lệ không? Nếu vậy, tại sao?

+1

Có nhiều câu lệnh bị ảnh hưởng bởi ASI, kiểm tra thông số kỹ thuật. liên kết mà @Esailija đã đăng hoặc xem xét [câu trả lời này] (http://stackoverflow.com/questions/2846283/what-are-the-rules-for-javascripts-automatic-semicolon-insertion/2846298#2846298), Tôi tóm tắt các quy tắc ASI ở đó ... Ah, và chỉ để cho vui, * thử * để vượt qua bài kiểm tra sau: [ASI Test] (http://asi.qfox.nl/) – CMS

+0

Xem thêm [Kiểu khối thực sự này quan trọng?] (http://stackoverflow.com/q/3004496/1048572) – Bergi

Trả lời

19

return không thể có LineTerminator sau nó vậy:

return 
{ 


}; 

được coi là return; (trở undefined) thay vì return {}; (trả về một đối tượng)

Xem các quy tắc cho Automatic Semicolon Insertion (ASI) để biết thêm.

+0

Có thể nói rằng nó liên quan đến ASI là một lợi thế cho câu trả lời? –

+4

Tôi đã phát triển để thực sự thích javascript, nhưng điều này vẫn còn thực sự kỳ lạ – NimChimpsky

+0

@ FlorianMargaine Hãy cho tôi một thời điểm – Esailija

2

Tôi nghĩ điều đó phụ thuộc vào tuyên bố. Ví dụ, một câu lệnh return có thể bị hỏng nếu mở cú đúp là trên dòng mới. More info here.

2
return { 
    a: "A", 
    b: "B" 
}; 

// vs. 

return // Semicolon automatically inserted here! Uh oh! 
{ 
    a: "A", 
    b: "B" 
} 
+0

tải xuống. Cảm ơn!!! –

3

Đây là tuyên bố hợp lệ.

Bởi vì các công cụ của JavaScript có ASI (Chèn dấu chấm phẩy tự động) chèn dấu chấm phẩy nếu cần thiết ở các dòng trả về. "Nếu cần thiết" là mơ hồ; đôi khi nó hoạt động và đôi khi không. Xem the rules.

Vì vậy, như đã nói trong câu trả lời khác:

return 
{ 
}; 

// Is read by the JavaScript engine, after ASI, as: 
return; // returns undefined 
{ // so this is not even executed 
}; 

Vì vậy, nó không được khuyến khích cho return báo cáo.

Tuy nhiên, nếu hướng dẫn của bạn đề xuất kiểu Allman cho khai báo chức năng thì nó hoàn toàn ổn. Tôi biết một số điều đó.

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