我想做以下事情:
例如,代码文件中定义的任何变量或函数都应该在REPL中可用。 (我会注意到这曾经用过许多v8版本,但我无法弄清楚如何在当前的v8中运行它(节点0.12 == v8 3.28.73)。)
我使用一个简单的类JSInterpreter,它有一个isolate和一个持久化的上下文对象作为成员变量。它们在初始化类时设置,并且绑定也在那时发生。
在解释某些代码的时候,我称这种方法为:
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 ();
我想把这种方法称为&amp;重复,每次,我希望上下文包含早期调用中的任何累积状态。因此,如果代码文件在REPL中包含(仅)var x = 5;
,我应该能够键入> x
并查看结果5
。
但实际结果是x is not defined
。
答案 0 :(得分:0)
事实证明,此代码实际上按预期工作。问题是我在运行代码之前使用了browserify,并且代码(例如var x = 5;
)被包装到函数范围中。