Có một tùy chọn JSLint , một trong những The Good Parts trên thực tế, "[yêu cầu] quan sát xung quanh các lệnh gọi tức thì", nghĩa là việc xây dựng
(function () {
// ...
})();
thay vào đó cần phải được viết là
(function () {
// ...
}());
Câu hỏi của tôi là - bất cứ ai có thể giải thích tại sao hình thức thứ hai này có thể được coi là tốt hơn? Có kiên cường hơn không? Ít bị lỗi hơn? Nó có ưu điểm gì hơn so với hình thức đầu tiên?
Kể từ khi đặt câu hỏi này, tôi đã hiểu ra tầm quan trọng của việc có sự phân biệt trực quan rõ ràng giữa các giá trị của hàm và các giá trị của hàm. Hãy xem xét trường hợp kết quả của lệnh gọi ngay lập tức là phía bên phải của một biểu thức gán:
var someVar = (function () {
// ...
}());
Mặc dù các dấu ngoặc đơn ngoài cùng là không cần thiết về mặt cú pháp, nhưng dấu ngoặc đơn mở đầu cung cấp một dấu hiệu phía trước rằng giá trị đang được gán không phải là bản thân hàm mà là kết quả của hàm được gọi.
Điều này tương tự như lời khuyên của Crockford liên quan đến việc viết hoa các hàm khởi tạo - nó được dùng như một gợi ý trực quan cho bất kỳ ai đang xem mã nguồn.