v8范围如何工作?

时间:2013-12-15 12:54:27

标签: c++ node.js v8

这个问题可以缩小到:

  • HandlePersistentLocal之间的区别是什么?
  • 如何正确处理每个?
  • 在处理Local时,完全如何与HandleScope一起使用,例如,我没有任何返回值? (我只看过返回scope.Close(value)的例子。)

1 个答案:

答案 0 :(得分:2)

HandleScope视为一个堆栈 - 每次创建一个堆栈时,它都是最新的范围。当它们超出范围时,在HandleScope之后创建的任何Local<>都可以删除/ GC。

Persistent<>未受HandleScope影响,只能使用Dispose删除。

如果要从函数返回值,则将其创建为Local,然后调用scope.Close(myLocalObject),将该对象的所有权从创建的范围传递到父范围。没有返回任何内容的函数仍然必须返回未定义的scope.Close(Undefined());

修改

Handle只是LocalPersistent的基类。有关v8开发人员站点上的作用域和句柄的详细信息:https://developers.google.com/v8/embed

如果您查看该页面上示例代码中的注释,请回复:返回args.this,这是在构造函数(例如new MyObject)中使用的。