Javascript V8:创建新的变量范围

Javascript V8:创建新的变量范围,javascript,v8,Javascript,V8,在JavaScript中,当我输入一个新函数时,我会得到一个新的局部变量范围。例如,像这样: function f() { var x = 42; // this is in our local variable scope // other code } 我现在想在V8中也这样做。我将其他代码作为字符串并通过Script::compile编译它,然后通过Script::run运行它 现在,我创建了一个新的上下文,但我认为这完全是矫枉过正。这也意味着我必须在新的上下文中重新

在JavaScript中,当我输入一个新函数时,我会得到一个新的局部变量范围。例如,像这样:

function f() {
     var x = 42; // this is in our local variable scope
     // other code
}
我现在想在V8中也这样做。我将
其他代码
作为
字符串
并通过
Script::compile
编译它,然后通过
Script::run
运行它


现在,我创建了一个新的
上下文
,但我认为这完全是矫枉过正。这也意味着我必须在新的上下文中重新定义我的全局成员。

< P>如果我理解正确,你希望让C++侧脚本在一个新的孤立上下文中运行,我假设你不希望它偶然混淆或修改全局环境。在这种情况下,在执行代码之前,请执行以下操作:

std::string sScopedCode = "(function(){" + sYourCode + "})();"

这将确保sYourCode中的代码与您可能进行的其他调用保持隔离。

要回答这个问题,了解您试图达到或避免的效果会很有帮助。如果您确实有一个局部变量作用域,那么现在代码中有什么重要的东西可以使用?@BradWerth:这些变量仅对
脚本
可见。创建这个变量范围必须非常便宜,尤其是因为我可能会递归调用这个变量。我希望变量在C++中构造,因为我也需要访问它们。我从来没有发现过V8方法来模仿“var”行为。我可以建议您添加变量作为函数的属性吗?这与您正在寻找的行为非常接近,尽管您必须在代码的其余部分小心使用任何“this”用法。啊,是的,这是一种可能性/解决方法。在内部V8名称空间及其内部代码中,我见过这样的局部范围变量,但我不喜欢使用内部API。