Tôi đã nghiên cứu khá nhiều về điều này nhưng chủ yếu là bằng cách ghép các câu hỏi khác lại với nhau, mà vẫn còn một số nghi ngờ. Trong ứng dụng không làm mới trang trình duyệt bất kỳ lúc nào và có thể hoạt động trong một thời gian (mà không đóng) (giả sử làm mới trang hoặc điều hướng đến trang khác sẽ khởi động lại mã js), cách tốt nhất để đảm bảo đối tượng là gì phát hành và không có rò rỉ bộ nhớ.Cuộc sống của các đối tượng JavaScript & Rò rỉ bộ nhớ
Đây là những trường hợp cụ thể mà tôi quan tâm:
Tất cả mã bên dưới đều nằm trong mẫu mô-đun tiết lộ.
mycode = function(){}()
biến phạm vi chức năng, tôi chắc chắn một điều này được thu thập bởi GC tốt
function(){ var h = "ss";}
biến trong mô-đun, nên g = null khi nó không còn cần thiết?
var g;
function(){ g = "dd";}
Và cuối cùng là tuổi thọ của jqXHR: nó có được dọn dẹp sau khi trả về không? Nếu nó được đặt thành null trong mọi trường hợp như là một biện pháp phòng ngừa cho dù được giữ bên trong một chức năng hoặc mô-đun?
Nếu làm điều này, nó là x dọn dẹp bởi GC sau khi nó trả ?:
function(){
var x = $.get();
x.done = ...;
x.fail = ...;
}
Làm thế nào về việc khi làm điều này, nó cũng sẽ được dọn dẹp sau x lợi nhuận ?:
var x;
function(){
x = $.get();
x.done = ...;
x.fail = ...;
}
Cuối cùng, có cách nào để dọn sạch tất cả các biến và khởi động lại một mô-đun mà không cần khởi động lại trình duyệt không?
Nếu bạn đang suy nghĩ về rò rỉ bộ nhớ, bạn không nên suy nghĩ về các biến. Hãy suy nghĩ về các đối tượng và tài liệu tham khảo và các hàm ý khả năng tiếp cận mà sau này có cho các đối tượng. – delnan
Vâng, nó chỉ là tôi nghĩ về tất cả mọi thứ trong js như một biến, nhưng tôi nhận được quan điểm của bạn. Cảm ơn. –