Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在v8中正确恢复Javascript上下文?_Javascript_V8 - Fatal编程技术网

如何在v8中正确恢复Javascript上下文?

如何在v8中正确恢复Javascript上下文?,javascript,v8,Javascript,V8,我想做以下工作: 使用v8执行Javascript文件 打开一个REPL,它在与代码完全相同的上下文中计算代码 例如,在代码文件中定义的任何变量或函数都应该在REPL中可用。我会注意到很多v8版本以前都使用过这个功能,但是我不知道如何在当前的v8节点0.12==v8 3.28.73中使用它 我使用一个简单的类JS解释器,它有一个隔离和一个持久上下文对象作为成员变量。它们是在类初始化时设置的,绑定也会在初始化时发生 当需要解释某些代码时,我将此方法称为: Str JSInterpreter::In

我想做以下工作:

使用v8执行Javascript文件 打开一个REPL,它在与代码完全相同的上下文中计算代码 例如,在代码文件中定义的任何变量或函数都应该在REPL中可用。我会注意到很多v8版本以前都使用过这个功能,但是我不知道如何在当前的v8节点0.12==v8 3.28.73中使用它

我使用一个简单的类JS解释器,它有一个隔离和一个持久上下文对象作为成员变量。它们是在类初始化时设置的,绑定也会在初始化时发生

当需要解释某些代码时,我将此方法称为:

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;正在被包装到函数作用域中