Nhóm của tôi không có bất kỳ nhà phát triển JS có kinh nghiệm nào, nhưng chúng tôi đang viết thư viện ở Node và nhận được đề xuất từ một nhà phát triển JS thực sự rằng "Chúng tôi sẽ làm cho mô đun trở nên phức tạp hơn - không gây ô nhiễm không gian tên toàn cầu và dễ đọc hơn để mới comers", và nói với chúng tôi phải làm như sau:Có lý do nào để xác định module.exports sử dụng IIFE không?
module.exports = (function(){
return {
nameToExpose: functionToExpose
...
};
})();
hơn
module.exports.nameToExpose = functionToExpose;
điểm này là gì, nếu có? Sau này không thực hiện bất kỳ khai báo cục bộ nào có thể được phạm vi bởi IIFE, và thậm chí nếu nó đã làm, chúng sẽ là cục bộ cho tệp mô-đun và không phải là toàn cục cho toàn bộ chương trình mà require()
của nó. Một số Googling và poking về trang web này không trả lời bất kỳ câu trả lời về câu hỏi cụ thể này, mặc dù có nhiều giải thích khác của IIFEs mà tôi đã đọc (và được tóm tắt trong các bình luận ở trên). Một số thử nghiệm chắc chắn cho thấy rằng sau này không không thực sự đặt functionToExpose
trong không gian tên chung, mặc dù tên gốc của nó được ghi lại trong chính loại hàm.
Anh ấy phải cung cấp cho bạn lời khuyên về mã javascript trong trình duyệt. Một IIFE trong trường hợp đó ngăn chặn sự ô nhiễm không gian tên toàn cầu. – MinusFour
Đó là những gì đồng đội của tôi nghĩ, nhưng mã cụ thể trong câu hỏi là một phần của một ứng dụng đặc biệt có ý định chạy với Node. Không có giao diện người dùng trình duyệt. –
Tìm một "nhà phát triển JS thực sự" khác thực sự hiểu nút và mô-đun là gì và không gian tên chung là gì. Nếu điều này dễ đọc hơn, tôi sẽ ăn mũ của mình. –