0

要在 Rhino 中执行 JavaScript,必须为脚本创建一个执行上下文。Context 类的构造函数使用 JavaScript 合规级别VERSION_DEFAULT.

protected Context(ContextFactory factory) {
    if(factory == null) {
        throw new IllegalArgumentException("factory == null");
    }
    this.factory = factory;
    **setLanguageVersion(VERSION_DEFAULT);**
    optimizationLevel = codegenClass != null ? 0 : -1;
    maximumInterpreterStackDepth = Integer.MAX_VALUE;
}

由于我在 API 中找不到VERSION_DEFAULT任何实际VERSION_XXX常量的映射,我想知道哪个 JavaScript 合规级别 VERSION_DEFAULT 是。Rhino 1.7R1 (*ttps://developer.mozilla.org/en/New_in_Rhino_1.7R1) 的发行说明指出必须明确指定 JavaScript 版本,但没有提及Context.setLanguageVersion()省略时使用哪个版本。

4

1 回答 1

1

浏览了大部分 Rhino 代码后,看起来大多数针对语言版本的测试都是负面测试,例如

if (getLanguageVersion() != Context.VERSION_1_2) {
  返回参数计数;
}

VERSION_DEFAULT 被定义为“0”,因此它看起来需要设置为 1.7 的一个地方是支持“let”和“yield”关键字,因为来自 TokenStream 的代码:

if ((result == Token.LET || result == Token.YIELD) &&
  parser.compilerEnv.getLanguageVersion()
    < 上下文.VERSION_1_7)
{
  // LET 和 YIELD 仅在 1.7 及更高版本中是令牌
  结果 = 令牌.NAME;
}
于 2009-08-31T09:30:24.603 回答