gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:42:44 24 4
gpt4 key购买 nike

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

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

var f = new Foo();

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

我的猜测:

  1. Foo 构造函数对象
  2. f.__proto__ Foo 构造函数对象的实例
  3. f
  4. 一个函数对象
  5. 两个函数对象

最佳答案

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

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

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

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

为什么?上面的代码完全没有副作用。您没有在任何地方调用 Foo 或使用 f,从某种意义上说,它是“死代码”,它并没有真正被使用。


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

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

所以 - 这个问题真的不可能准确回答:)

关于javascript - 给定以下代码,在内存中创建了多少个复杂对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20735503/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com