如果范围无用,是否会清理范围?

时间:2016-08-16 14:59:05

标签: javascript memory-management

说明用例(可能编译或不编译)的伪示例代码

+function($){
    var enableapp = 'enable-application';
    var x = function(something) {
      this.thing = something;
      this.dosomething();
    }
    x.prototype.dosomething = function() {
       console.log(this.thing);
    }
    $('[data-fancy]').each(function(index,elem) {
       var fancy = $(elem);
       if(fancy.is('[data-'+enableapp+']') && fancy.data(enableapp) == 'yes') {
          fancy.data('app', new x(fancy));
       }
       else {
           fancy.removeData('app');
       }

}(jQuery)

在这个例子中,我启动了一个范围函数来注册我的应用程序' X表示标有数据特征的元素,它们将启用应用程序设置为“是”'

因为我需要多次使用此访问密钥,并且可能会经常更改,所以我决定将其存储在最外层范围内的变量中,我可以将其用于多个检查和平衡。

我的问题是:

如果我不在X应用程序中使用enableapp变量,那么在最初范围内运行初始课程时会收集垃圾?或者它将保留在内存中,直到最后一个Application对象被清除,并且不再被初始化。

1 个答案:

答案 0 :(得分:1)

因为enableapp未在X应用程序构造函数或原型方法中的任何位置引用,并且仅在forEach函数的定义时使用 - 它应该在某些时候被垃圾收集。