V8 JavaScript Engine 入门指南 4.1 -- 基本概念(Handle,Scope,Context)

Handle,句柄

V8里有两种句柄:

1. Local handles:本地句柄,本地句柄在栈上,并且当指定的析构函数被调用时删除。这些句柄的生存时间由句柄范围决定;句柄范围经常在一个函数的开始的时候被创建,函数结束的时候被删除。

类Local 产生的本地句柄同样可以被存储在父类Handle 声明的句柄里。

2. Persistent handles:持久句柄,持久句柄并不在栈上分配,并且只有你指定移除它们时才被删除。一个持久的句柄通过 Persistent::New 来创建,并且通过Persistent::Dispose 来销毁。

类 Persistent 产生的持久句柄同样可以被存储在父类 Handle 声明的句柄里。

Scope : 句柄范围

句柄范围就是一个句柄的容器,这样就不需要挨个删除句柄了!

image

Context: 执行环境

在V8中,context 就是一个JavaScript的执行环境。当你创建了一个 context 后,你可以进入和退出任意次。也可以从一个context进入到另一个context

image

 

再看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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值