2013-12-15 59 views
3

這個問題可以縮小到:v8範圍界定如何工作?

  • 什麼HandlePersistentLocal之間的區別?
  • 如何正確處置每個?
  • 在處理Local s時,如何在正好HandleScope一起使用的情況下,例如,我沒有任何返回值? (我只看到scope.Close(value)返回的例子)。

回答

2

想想HandleScope s作爲一個堆棧 - 每次創建一個,它都是最新的作用域。當它們超出範圍時,在該HandleScope之後創建的任何Local<>都可以被刪除/ GC'd。

Persistent<>未更改HandleScope,只能刪除Dispose

如果您從函數返回值,則將其創建爲Local,然後調用scope.Close(myLocalObject),將該對象的所有權從創建的範圍傳遞給父範圍。不返回任何東西的函數仍然必須返回一個未定義的scope.Close(Undefined());

編輯

Handle僅僅是LocalPersistent的基類。有一個關於作用域良好的信息並處理在V8開發者網站:https://developers.google.com/v8/embed

回覆:返回args.this,這是在一個構造函數(例如new MyObject)使用,如果您在該網頁上的示例代碼中的註釋看。

+1

問題得到4 upvotes,你是這方面的專家?給我一些好的和壞的例子來理解v8範圍。 – damphat

+0

我剩下兩個問題:1.「手柄」怎麼辦? 2.我正在查看Node插件的一些示例代碼,如果您從http://nodejs.org/api/addons.html#addons_wrapping_c_objects中稍微查看一下,您會發現某處有一個「返回參數」。這();'儘管我們有一個'HandleScope'。這裏會發生什麼? – Matoe

+0

我的理解是'Handle'只是一個抽象類/接口。 – vkurchatkin