代码之家  ›  专栏  ›  技术社区  ›  amwinter

尽管有全局引用,javascript会删除我的var吗

  •  0
  • amwinter  · 技术社区  · 15 年前
    window.global_array = new Array();  
    window.example = function()  
    {  
         var x = new Object();  
         x['test_property'] = 3;  
         global_array.push(x);  
    }
    

    javascript专家,请回答三个问题:

    1. 当example()返回时,javascript会删除作用域末尾的x,或者将其保存在全局数组中。
    2. 我能安全地假设javascript在python中的工作方式是“一切都是引用”吗?
    3. 所有虚拟机的创建是否相同,或者GC规则是否会因实现而异。
    1 回复  |  直到 15 年前
        1
  •  4
  •   Tomalak    15 年前
    1. 对。 x 将被删除,因为其作用域仅限于函数体(您使用 var 关键字,这确保了这一点。没有var声明的变量将是全局的,即使在函数体中也是如此)。然而, 价值 X HAD将继续出现在 global_array .
    2. 不完全是这样。对象(数组也是!)作为引用传递,将复制基元值(如数字)。
    3. GC的实现会有所不同,但这不应该是您关心的问题。除非存在bug,否则JavaScript实现的行为将相同。

    自从 X 正在引用一个对象,分配(通过 push() )正在增加引用计数。什么时候? X 在函数结束时超出范围,这不会将引用计数减少到0,因此对象仍将存在-它现在从内部唯一的引用 全局数组 .