EDITđóng cửa Javascript - sự khác biệt giữa các
Với số câu trả lời nói là những gì "bạn có thể làm cho mọi việc cá nhân!" bên dưới, tôi cũng sẽ thêm phần này vào đầu:
Tôi biết bạn có thể mô phỏng các biến riêng tư trong phạm vi đóng. Đó không phải là những gì tôi yêu cầu. Tôi hỏi, đưa ra hai ví dụ dưới đây, nơi tôi "xuất khẩu" mọi thứ từ việc đóng cửa, sự khác biệt cơ bản giữa hai ví dụ này là gì.
Với hai phương pháp của việc tạo ra đối tượng/phương pháp:
var test = {}
test = (function(){
var a_method = function(print_me){
return "hello "+print_me;
}
return {print_me: a_method};
})();
test.print_me2 = function(print_me2){
return "hello "+print_me2;
}
test.print_me('world');
>>> returns "hello world"
test.print_me2('world');
>>> returns "hello world"
Tôi hiểu rằng phương pháp đầu tiên cho phép biến tư nhân (mà như một nhà phát triển python tại trái tim tôi không thực sự quan tâm để sử dụng), nhưng cả hai dường như khá gần gũi với tôi, chỉ có một cái đầu tiên trông "mát mẻ" (như trong tất cả những người javascript lớn dường như đang làm theo cách đó) và cách thứ hai trông rất vượt qua & eacute ;.
Vì vậy, giống như, sự khác biệt là gì?
Tôi đã xem qua các câu hỏi đóng cửa ở đây - hầu hết trong số chúng tập trung vào những gì hoặc tại sao bạn sử dụng chúng; Tôi hiểu tiện ích của họ, tôi chỉ muốn biết tại sao bạn lại làm điều đầu tiên trong lần thứ hai và những lợi ích của nó.
Tôi thích bằng chứng khó hơn phỏng đoán - không tìm kiếm "đây là cách trẻ làm mát" hoặc "tôi nghe rằng mozilla sử dụng bộ nhớ tốt hơn khi bạn sử dụng đóng", nhưng bằng chứng định tính đối với một người là 'tốt hơn' so với người kia.
đó là một câu trả lời tốt hơn nhiều so với trước đây. Và có, tôi hiểu rằng tôi đang đặt đối tượng là kết quả của hàm được thực thi ngay lập tức thay vì đặt thuộc tính của đối tượng được cho phép - giả sử tôi đang cố gắng tạo 'print_me' sẽ là thuộc tính duy nhất trên đối tượng thử nghiệm. Điều gì sẽ là lợi ích của việc làm nó trong một đóng cửa hơn là làm nó như là một nhiệm vụ thẳng? – tkone
@tkone: Lợi ích của việc thực hiện việc đóng cửa chỉ là bạn đóng cửa. Bạn có thể tạo các biến cục bộ, để bạn không gây ô nhiễm không gian tên chung. Tuy nhiên, việc cẩn thận với không gian tên chung là vấn đề lớn hơn nếu bạn đang viết mã hoặc các mã thư viện. Ví dụ, thư viện jQuery lớn chỉ thêm hai tên vào không gian tên chung. – Guffa
ok tuyệt. Đó là chính xác những gì tôi đã cố gắng tìm ra.m tôi biết thêm một tấn tên cho không gian tên toàn cầu là một ý tưởng tồi (do đó sử dụng không gian tên), nhưng chỉ muốn biết nếu mọi người đã đóng cửa vì chúng "nóng" hay nếu họ phục vụ một tiện ích trong một trường hợp như trên. – tkone