如何预防和防范闭包内存泄漏
How to prevent and guard against closure memory leaks
var utils = (function() {
var playlistutils = (function() { // playlist utils
return {
saveplaylisobj: function(playlist) {
if (playlist) {
localStorage.setItem('playlistobj', JSON.stringify(playlist));
}
},
getplaylistobj: function() {
var plobj = localStorage.getItem('playlistobj');
if (plobj) {
return JSON.parse(plobj) || {};
}
}
};
})();
return {
playlistutils: playlistutils
};
})();
这个关闭是否可能导致内存泄漏?
我 运行 遇到 chrome 移动设备 android 在 运行 我的网络应用程序时间歇性崩溃的问题。
参考:What does this stack trace mean?
应用程序细节:
服务器:JBOSS
框架:Angular 重,javascript 和 jQuery
我没有看到这里有泄漏。而且,无论泄漏是 material,它都必须拥有大量内存,或者是创建和泄漏数千次的东西,或者两者的某种组合。这看起来不像会被多次声明并且不会占用大量内存的东西。
无论如何,您在这里使用 IIFE 过于复杂(导致难以遵循代码)并且完全没有必要。您可以只使用一个没有机会关闭的对象文字:
var utils = {
playlistutils: {
saveplaylistobj: function(playlist) {
if (playlist) {
localStorage.setItem('playlistobj', JSON.stringify(playlist));
}
},
getplaylistobj: function() {
var plobj = localStorage.getItem('playlistobj');
if (plobj) {
return JSON.parse(plobj) || {};
}
}
}
};
var utils = (function() {
var playlistutils = (function() { // playlist utils
return {
saveplaylisobj: function(playlist) {
if (playlist) {
localStorage.setItem('playlistobj', JSON.stringify(playlist));
}
},
getplaylistobj: function() {
var plobj = localStorage.getItem('playlistobj');
if (plobj) {
return JSON.parse(plobj) || {};
}
}
};
})();
return {
playlistutils: playlistutils
};
})();
这个关闭是否可能导致内存泄漏?
我 运行 遇到 chrome 移动设备 android 在 运行 我的网络应用程序时间歇性崩溃的问题。
参考:What does this stack trace mean?
应用程序细节: 服务器:JBOSS 框架:Angular 重,javascript 和 jQuery
我没有看到这里有泄漏。而且,无论泄漏是 material,它都必须拥有大量内存,或者是创建和泄漏数千次的东西,或者两者的某种组合。这看起来不像会被多次声明并且不会占用大量内存的东西。
无论如何,您在这里使用 IIFE 过于复杂(导致难以遵循代码)并且完全没有必要。您可以只使用一个没有机会关闭的对象文字:
var utils = {
playlistutils: {
saveplaylistobj: function(playlist) {
if (playlist) {
localStorage.setItem('playlistobj', JSON.stringify(playlist));
}
},
getplaylistobj: function() {
var plobj = localStorage.getItem('playlistobj');
if (plobj) {
return JSON.parse(plobj) || {};
}
}
}
};