如何防止和防止关闭内存泄漏

时间:2015-03-20 20:29:37

标签: javascript memory-leaks closures

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

1 个答案:

答案 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) || {};
            }
        }
    }
};