1
如果我只想返回一个值,我需要handle_scope
吗?是我只需要返回一个值时需要的v8 HandleScope?
Handle<Value> platformName(const Arguments& a) {
HandleScope handle_scope;
return String::New("linux");
}
如果我只想返回一个值,我需要handle_scope
吗?是我只需要返回一个值时需要的v8 HandleScope?
Handle<Value> platformName(const Arguments& a) {
HandleScope handle_scope;
return String::New("linux");
}
假定您的函数总是从现有的范围调用,您不需要在此函数中声明范围。选择包含每个函数的作用域在很大程度上是选择是否释放内存以实现每个函数的垃圾收集。您可能不需要这样做,并且应该定期关闭您的“主”范围以允许GC发生。
如果你想在这个函数来创建一个新的范围,然后回报你的榜样的正确方法是:
return handle_scope.Close(String::New("linux"));
在这种情况下,这样做会给你带来更多附加价值,因为没有在范围中创建的本地句柄;只有你正在返回的那个,无论如何它都在封闭的范围内。但是如果你在这个函数中创建了几个本地句柄,那么将它们放在一个新的作用域中可能是值得的,因此它们可以被GC化。
我的功能是从JavaScript调用的,它是否假设它已经有一个范围,并且除了HandleScope是不必要的? – exebook
不需要创建HandleScope。如果从JavaScript中调用,则创建的任何本地句柄将在调用的范围内创建,并且在该范围关闭时适用于GC。 –