如何在v8中正确恢复Javascript上下文?
我想做以下工作: 使用v8执行Javascript文件 打开一个REPL,它在与代码完全相同的上下文中计算代码 例如,在代码文件中定义的任何变量或函数都应该在REPL中可用。我会注意到很多v8版本以前都使用过这个功能,但是我不知道如何在当前的v8节点0.12==v8 3.28.73中使用它 我使用一个简单的类JS解释器,它有一个隔离和一个持久上下文对象作为成员变量。它们是在类初始化时设置的,绑定也会在初始化时发生 当需要解释某些代码时,我将此方法称为:如何在v8中正确恢复Javascript上下文?,javascript,v8,Javascript,V8,我想做以下工作: 使用v8执行Javascript文件 打开一个REPL,它在与代码完全相同的上下文中计算代码 例如,在代码文件中定义的任何变量或函数都应该在REPL中可用。我会注意到很多v8版本以前都使用过这个功能,但是我不知道如何在当前的v8节点0.12==v8 3.28.73中使用它 我使用一个简单的类JS解释器,它有一个隔离和一个持久上下文对象作为成员变量。它们是在类初始化时设置的,绑定也会在初始化时发生 当需要解释某些代码时,我将此方法称为: Str JSInterpreter::In
Str JSInterpreter::InterpretJS (const Str &js)
{ v8::Isolate::Scope isolate_scope (isolate_);
v8::HandleScope handle_scope (isolate_);
// Restore the context established at init time;
// Have to make local version of persistent handle
v8::Local <v8::Context> context =
v8::Local <v8::Context>::New (isolate_, context_);
Context::Scope context_scope (context);
Handle <String> source = String::NewFromUtf8 (isolate_, js . utf8 ());
Handle <Script> script = Script::Compile (source);
Handle <Value> result = script -> Run ();
我想一次又一次地调用这个方法,每次我都希望上下文包含以前调用的任何累积状态。因此,如果代码文件只包含var x=5;在REPL中,我应该能够键入>x并查看结果5
但是实际的结果是x没有定义。事实证明,这段代码确实按照预期工作。问题是我在运行代码之前使用了browserify,代码例如var x=5;正在被包装到函数作用域中