Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Rò rỉ bộ nhớ (Memory Leaks) trong JavaScript


Memory Leaks trong JavaScript

JS là ngôn ngữ garbage-collected: tự cấp phát bộ nhớ khi khai báo biến, tự giải phóng khi không còn tham chiếu. Rò rỉ thường xảy ra ở giai đoạn giải phóng.

1) Biến toàn cục vô tình (Accidental Globals)

Gán giá trị cho biến chưa khai báo (không có var/let/const) → tạo property trên window.

function myArray(arg) { languages = "[javascript,.....]"; } // tạo window.languages

Nguy hiểm hơn: dùng this trong hàm không strict mode:

function myArray(arg) { this.languages = "[javascript,.....]"; } // gán lên window

Biến toàn cục không bao giờ hết scope → GC không thu gom → rò rỉ.

2) Closures

Inner function truy cập biến outer function. Nếu inner function được trả về/giữ tham chiếu, scope outer (kể cả biến không dùng) vẫn được giữ.

var newvalue; function outFun() { var array = new Array(1000000); var value = newvalue; function innFun() { if (value) return array; } return function () {}; } setInterval(function () { newvalue = outFun(); }, 3);

Mỗi lần gọi outFun, mảng lớn 1 triệu phần tử bị giữ trong closure scope → memory leak tích lũy.