3
這個問題可以縮小到:v8範圍界定如何工作?
- 什麼
Handle
,Persistent
和Local
之間的區別? - 如何正確處置每個?
- 在處理
Local
s時,如何在正好與HandleScope
一起使用的情況下,例如,我沒有任何返回值? (我只看到scope.Close(value)
返回的例子)。
這個問題可以縮小到:v8範圍界定如何工作?
Handle
,Persistent
和Local
之間的區別?Local
s時,如何在正好與HandleScope
一起使用的情況下,例如,我沒有任何返回值? (我只看到scope.Close(value)
返回的例子)。想想HandleScope
s作爲一個堆棧 - 每次創建一個,它都是最新的作用域。當它們超出範圍時,在該HandleScope之後創建的任何Local<>
都可以被刪除/ GC'd。
Persistent<>
未更改HandleScope
,只能刪除Dispose
。
如果您從函數返回值,則將其創建爲Local
,然後調用scope.Close(myLocalObject)
,將該對象的所有權從創建的範圍傳遞給父範圍。不返回任何東西的函數仍然必須返回一個未定義的scope.Close(Undefined());
編輯
Handle
僅僅是Local
和Persistent
的基類。有一個關於作用域良好的信息並處理在V8開發者網站:https://developers.google.com/v8/embed
回覆:返回args.this
,這是在一個構造函數(例如new MyObject
)使用,如果您在該網頁上的示例代碼中的註釋看。
問題得到4 upvotes,你是這方面的專家?給我一些好的和壞的例子來理解v8範圍。 – damphat
我剩下兩個問題:1.「手柄」怎麼辦? 2.我正在查看Node插件的一些示例代碼,如果您從http://nodejs.org/api/addons.html#addons_wrapping_c_objects中稍微查看一下,您會發現某處有一個「返回參數」。這();'儘管我們有一個'HandleScope'。這裏會發生什麼? – Matoe
我的理解是'Handle'只是一個抽象類/接口。 – vkurchatkin