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 mobile for android会间歇性地崩溃。
参考:What does this stack trace mean?
应用程序细节: 服务器:JBOSS 框架:Angular heavy,javascript和jQuery
答案 0 :(得分:2)
我在这里看不到泄漏。并且,无论泄漏是否是材料,它都必须要么拥有大量内存,要么是创建和泄漏数千次或两者的某种组合。这看起来不像是会被多次声明并且不会占用大量内存。
在任何情况下,您在这里使用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) || {};
}
}
}
};