给定以下代码,在内存中创建了多少复杂对象?

时间:2013-12-23 00:16:49

标签: javascript

鉴于以下代码,在内存中创建了多少复杂对象?

function Foo() {
  this.one = function() {
    return "one";
  }
}

var f = new Foo();    

Foo.two = function() {
  return "two";
};

我的猜测:

  1. Foo构造函数对象
  2. f.__proto__ Foo构造函数对象
  3. 的实例
  4. f
  5. one功能对象
  6. two功能对象

1 个答案:

答案 0 :(得分:2)

这个问题很棘手,因为规范没有说明在内存中创建的对象。

JavaScript有很多不同的实现,例如Chrome中的v8,Safari中的JSC,Firefox中的SpiderMonkey,IE中的JScript和Chakra,Rhino作为Java中的脚本引擎等等。更不用说其他更深奥的实现了。

更糟糕的是,实现 指定了函数的VariableEnvironment之类的东西,并提到它不是实现细节,而只是一个演绎工具,使规范更容易阅读。

鉴于上面的代码 - 一个“聪明”的引擎可以在这里分配零对象。

为什么呢?上面的代码根本没有副作用。你没有在任何地方调用Foo或使用f,而且它的'死代码'在某种意义上并没有真正使用过。


那就是说,忽略那个“微小”的问题 - 根据代码的使用方式,有一些事情:一个 - 可能会分配字符串"foo""one"(它们是原始的,但可能需要拳击取决于使用)。

或者,引擎可以完全inline这些功能。如果是,则onetwo不会被分配,而是直接内联。

所以 - 这个问题真的无法准确回答:)