Handle,控制代碼
V8裡有兩種控制代碼:
1. Local handles:本地控制代碼,本地控制代碼在棧上,並且當指定的解構函式被調用時刪除。這些控制代碼的存留時間由控制代碼範圍決定;控制代碼範圍經常在一個函數的開始的時候被建立,函數結束的時候被刪除。
類Local 產生的本地控制代碼同樣可以被儲存在父類Handle 聲明的控制代碼裡。
2. Persistent handles:持久控制代碼,持久控制代碼並不在棧上分配,並且只有你指定移除它們時才被刪除。一個持久的控制代碼通過 Persistent::New 來建立,並且通過Persistent::Dispose 來銷毀。
類 Persistent 產生的持久控制代碼同樣可以被儲存在父類 Handle 聲明的控制代碼裡。
Scope : 控制代碼範圍
控制代碼範圍就是一個控制代碼的容器,這樣就不需要挨個刪除控制代碼了!
Context: 執行環境
在V8中,context 就是一個JavaScript的執行環境。當你建立了一個 context 後,你可以進入和退出任意次。也可以從一個context進入到另一個context
再看hello world
#include using namespace v8;int main(int argc, char* argv[]) { // 建立一個控制代碼範圍. HandleScope handle_scope; // 建立一個context,這是一個持久控制代碼. Persistent<Context> context = Context::New(); // 進入之前建立的context
Context::Scope context_scope(context); // 這是一個本地控制代碼. Handle<String> source = String::New("'Hello' + ', World!'"); // 這是一個本地控制代碼. Handle<Script> script = Script::Compile(source); // 這是一個本地控制代碼.
Handle<Value> result = script->Run(); // 持久控制代碼必須顯示的刪除
context.Dispose();
// 函數結束前,HandleScope會被析構,這個函數範圍內的本地控制代碼也會跟著被刪除 return 0;}