Nó sẽ phụ thuộc vào ngữ cảnh của mã, nhưng có một thực hành thiết kế chung trong JavaScript để đóng gói các biến và phương thức trong một Không gian tên hoặc Mô hình mô-đun. Mã này có thể là một dẫn xuất của mục đích đó.
Lý do đằng sau Mô hình thiết kế mô-đun bao gồm các biến chứng với các biến toàn cục và sự nguy hiểm của 'clobbering'.
Có thể xảy ra hiện tượng Clobbering khi bất kỳ biến (hoặc hàm) nào cùng tên được xác định hai lần. Định nghĩa thứ hai sẽ ghi đè lên giá trị đầu tiên, và về bản chất là nó.
Vì vậy, quy tắc để bao bọc mã của bạn trong một cấu trúc bảo vệ các biến (và hàm) của bạn khỏi không gian tên chung. Douglas Crockford mô tả các loại kịch bản này.
example này cho thấy một hơi thân phổ biến hơn gọi là 'đóng cửa':
var jspy = (function() {
var _count = 0;
return {
incrementCount: function() {
_count++;
},
getCount: function() {
return _count;
}
};
})();
Người ta mất phương hướng lúc đầu, nhưng một khi bạn nhận ra nó, nó trở thành bản chất thứ hai. Vấn đề là để đóng gói biến _count như một thành viên riêng cho đối tượng trả về có hai phương thức có thể truy cập.
Điều này là mạnh mẽ bởi vì không gian tên toàn cầu hiện chỉ bao gồm một var (jspy) trái ngược với một với hai phương pháp. Lý do thứ hai là nó mạnh mẽ là nó đảm bảo biến _count chỉ có thể được truy cập bởi logic trong hai phương thức (incrementCount, getCount).
Như tôi đã nói, mã của bạn có thể là một hóa thân của quy tắc chung này. Một trong hai cách điều quan trọng là phải biết mẫu này trong JavaScript vì nó mở ra cánh cửa cho các tương tác mạnh mẽ hơn nhiều giữa các khung công tác, ví dụ, và tải không đồng bộ của chúng như trong AMD.
Dưới đây là ví dụ đẹp namespace.
Tóm lại, có một Mẫu thiết kế JavaScript nâng cao sẽ giúp bạn biết và các cụm từ có liên quan là Mẫu mô-đun, Mẫu không gian tên. Các thuật ngữ liên quan bổ sung được đóng và AMD.
Hy vọng điều đó sẽ hữu ích. Tất cả tốt nhất! Nash
Đoạn mã thứ hai đó không chính xác về cú pháp. Nó có thêm một '}); Có lẽ mã thiếu một cái gì đó hoặc lỗi chính nó là vấn đề? –
Xin lỗi. Tôi đã sao chép và dán nhanh. Thực hiện chỉnh sửa. – tommi
Không có mồ hôi, nó chỉ thay đổi cách tiếp cận vấn đề là tất cả. Bây giờ tôi sẽ bỏ phiếu cho ai đó đoán (re: answer). –