这个问题可以缩小到:
Handle
,Persistent
和Local
之间的区别是什么?Local
时,完全如何与HandleScope
一起使用,例如,我没有任何返回值? (我只看过返回scope.Close(value)
的例子。)答案 0 :(得分:2)
将HandleScope
视为一个堆栈 - 每次创建一个堆栈时,它都是最新的范围。当它们超出范围时,在HandleScope之后创建的任何Local<>
都可以删除/ GC。
Persistent<>
未受HandleScope
影响,只能使用Dispose
删除。
如果要从函数返回值,则将其创建为Local
,然后调用scope.Close(myLocalObject)
,将该对象的所有权从创建的范围传递到父范围。没有返回任何内容的函数仍然必须返回未定义的scope.Close(Undefined());
修改的
Handle
只是Local
和Persistent
的基类。有关v8开发人员站点上的作用域和句柄的详细信息:https://developers.google.com/v8/embed
如果您查看该页面上示例代码中的注释,请回复:返回args.this
,这是在构造函数(例如new MyObject
)中使用的。