2009-09-20 38 views
31

Tôi đã bắt đầu sử dụng JSLint. Tôi đã kiểm tra mã của mình và tôi gặp phải lỗi này:Giải pháp cho lỗi JSLint

Sự cố ở dòng 92 ký tự 7: Di chuyển lệnh gọi vào dấu ngoặc đơn chứa hàm.
})();

Sự cố ở dòng 92 ký tự 7: Khớp toàn bộ lời gọi hàm ngay lập tức trong parens.
})();

Cách khắc phục lỗi này?

+6

Sẽ giúp ích nếu chúng tôi biết điều gì ở dòng 92 (ít nhất). – Thiyagaraj

+9

Chỉ cần đi để đâm vào bóng tối và đoán nó là '})();' ;-) – travis

Trả lời

59

Tôi tin rằng điều này có nghĩa là bạn nên di chuyển chức năng gọi Parens bên trong gói Parens

(function() { /* code */ })() 

Hai dấu ngoặc trước rằng thực hiện chức năng là vấn đề. Đây là cách JSLint muốn nó trông giống như:

(function() { /* code */ }()) 
+10

Điều đó thật kỳ lạ. Quy ước thường bao bọc mọi thứ trước khi parens invocation cuối cùng - '(function() {})()'. – kangax

+4

Chà, vì khi nào thì jslint có ý nghĩa hoàn chỉnh? ;) Cá nhân tôi chỉ bỏ qua các quy tắc không có ý nghĩa, chẳng hạn như điều này. –

+14

"kể từ khi nào đã làm jslint làm cho cảm giác hoàn toàn?", Tôi biết rằng đã được thực hiện trong jest, nhưng mọi quy tắc mà crockford đưa vào đó có một số biện minh dài. Bạn có thể nói rằng nhiều quy tắc không phải là rất quan trọng, nhưng các quy tắc, ít nhất, có một sự biện minh vững chắc. –

35

Tôi tìm thấy một lời giải thích tốt ở đây: http://james.padolsey.com/javascript/closures-in-javascript/

Tập đầu tiên của dấu ngoặc đơn (khoảng "function(){}") không bắt buộc nhưng được sử dụng để làm cho nó rõ ràng rằng hàm được gọi ngay lập tức, do đó làm cho nó rõ ràng rằng biểu thức không nhất thiết trả về hàm đó; nhưng thay vào đó giá trị trả về của hàm đó

+1

Điều này có ý nghĩa hoàn hảo, đặc biệt khi đó là một chức năng lớn. Nó làm cho nó rất rõ ràng những gì đang xảy ra - một cái gì đó giúp khi đọc mã người khác đã viết, hoặc mã của riêng bạn sau 3 tháng không nhìn vào nó. Code, sau khi tất cả, được đọc nhiều hơn thường xuyên hơn nó được viết. –

+3

Thực ra, nó là bắt buộc nếu mã thông báo 'chức năng' là điều đầu tiên trên dòng. Bạn nhận được một lỗi cú pháp nếu không, bởi vì nó được coi là một khai báo hàm, thay vì một biểu thức. – scribu

+4

Đã hơn hai năm kể từ khi bài đăng này được đăng, nhưng tôi cảm thấy cần phải chỉ ra rằng, nếu bạn theo liên kết, bạn sẽ thấy rằng mã được mô tả trong báo giá trên sử dụng dấu ngoặc đơn theo cách ném cảnh báo JSLint, ví dụ (chức năng() {})(); – Frankie

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