Không có gì sai trong việc sử dụng $
trong các biến. Tôi sẽ không cố tình làm điều đó trên mọi biến số, nhưng nó vẫn là một cú pháp hợp lệ. jQuery là một trong những ví dụ $
được sử dụng làm tên biến. Đó cũng là lý do tại sao "các công cụ phát triển Chrome không phải lúc nào cũng thấy đây là lỗi Javascript" , vì không có lỗi ở nơi đầu tiên.
Nếu bạn sợ viết mã như:
var demo = function demo() {
var a = 123;
...
$a = 456; // A new variable is created in global scope.
}
sau đó bạn phải sử dụng trình kiểm tra kiểu, như jsLint , jsHint hoặc Google Clos Linter . Cái nào trong số đó? Tùy thuộc vào bạn để đưa ra lựa chọn. Để giúp bạn với điều đó, đây là một vài lưu ý:
Phong cách
Google Clos Linter tuân theo Google JavaScript Style Guide , được biết là được thực hiện một cách khéo léo. Sử dụng một kiểu nổi tiếng cho JavaScript hoặc bất kỳ sáu ngôn ngữ nào khác là một ý tưởng hay: khi bạn chia sẻ mã của mình hoặc thuê một nhà phát triển mới, rất có thể họ đã quen thuộc với phong cách này.
Nhiều nhà phát triển cũng quen thuộc với phong cách Douglas Crockford. Phong cách này được giải thích chi tiết trong JavaScript: The Good Parts , một cuốn sách đáng để mua bởi bất kỳ ai làm việc với JavaScript.
Đối với jsHint, tôi thực sự không thể tìm thấy những quy ước nào được sử dụng và trang web dường như tránh nói về chủ đề đó. Có lẽ tôi đã bỏ lỡ điều gì đó.
Hỗ trợ bởi IDE
Cả jsLint và jsHint đều được PhpStorm hỗ trợ . Đây cũng là trường hợp của Google Clos Linter.
Môi trường
Google Clos Linter là một trong một loạt các công cụ . Nếu bạn đã sử dụng Trình biên dịch đóng cửa của Google hoặc Thư viện đóng cửa của Google , tốt nhất nên chọn Công cụ đóng cửa trên các công cụ khác.
Nghiêm khắc
jsLint được biết đến là nghiêm khắc. jsHint dễ dãi hơn, điều này không phải lúc nào cũng tốt. Ví dụ: một trong những lý do để fork jsLint cho jsHint được giải thích trong một bài viết cho thấy mã xấu sẽ tạo ra lỗi trong jsLint, nhưng không phải trong jsHint:
/*global jQuery */
// Example taken from jQuery 1.4.2 source
jQuery.extend({
/* ... */
isEmptyObject: function( obj ) {
for ( var name in obj ) {
return false;
}
return true;
}
/* ... */
});
Mã này rất tệ, vì có vẻ như JavaScript có phạm vi chặn, trong khi nó thì không. Xem JavaScript: Phần tốt, trang. 102, Phụ lục A: Các bộ phận khủng khiếp, Phạm vi. Nói cách khác, nhìn vào mã mà không biết ngôn ngữ, chúng tôi hy vọng name
sẽ không hiển thị bên ngoài vòng lặp, trong khi nó sẽ vẫn hiển thị.
Đối với Google Clos Linter, tôi tin rằng nó ở đâu đó ở giữa jsLint và jsHint, nhưng tôi không có đủ thông tin để hỗ trợ điều đó.
Phần kết luận
Tôi sẽ tránh jsHint: nó quá dễ dãi, có nghĩa là nó sẽ không tìm thấy các lỗi tiềm ẩn mà những kẻ khác sẽ phát hiện ra. Hướng dẫn phong cách được sử dụng là khó tìm.
Trong số jsLint và Google Clos Linter, sự lựa chọn không rõ ràng. Cả hai đều được viết bởi các chuyên gia, cả hai đều tuân theo hướng dẫn phong cách nghiêm ngặt, được mô tả kỹ lưỡng đã được hàng ngàn nhà phát triển theo dõi. Sử dụng cả hai trong một thời gian, sau đó chọn một trong đó là thực tế hơn cho bạn.