如果作用域是无用的,那么它们会被清理吗?

Do scopes get cleaned up if they are useless?

本文关键字:作用域 无用 如果      更新时间:2023-09-26

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

+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)

在这个例子中,我启动了一个作用域函数,将我的' application ' X注册到标记为data-fancy的元素,这些元素已将enable-application设置为'yes'

因为我需要多次使用这个访问键,并且可能会经常更改,所以我决定将它存储在最外层作用域的一个变量中,在那里我可以使用它进行几个检查和平衡。

我的问题是

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

由于enableapp在X应用程序构造函数或原型方法中没有任何引用,并且仅在定义时在forEach函数中使用-它应该在某个时候被垃圾收集。