要在 Rhino 中执行 JavaScript,必须为脚本创建一个执行上下文。 Context class 的构造函数使用 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
常量的映射,我想知道 VERSION_DEFAULT 是哪个 JavaScript 合规级别。
Rhino 1.7R1 的发行说明 (*ttps://developer.mozilla.org/en/New_in_Rhino_1.7R1) 指出必须明确指定 JavaScript 版本,但没有提及 Context 时使用哪个版本.setLanguageVersion()
被省略。
最佳答案
浏览了大部分 Rhino 代码后,看起来大多数针对语言版本的测试都是负面测试,例如
if (getLanguageVersion() != Context.VERSION_1_2) { return paramCount; }
VERSION_DEFAULT 被定义为“0”,因此看起来需要将其设置为 1.7 的地方是为了支持“let”和“yield”关键字,因为来自 TokenStream 的以下代码:
if ((result == Token.LET || result == Token.YIELD) && parser.compilerEnv.getLanguageVersion() < Context.VERSION_1_7) { // LET and YIELD are tokens only in 1.7 and later result = Token.NAME; }
关于java - Mozilla犀牛 : Default JavaScript Compliance Level,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1142265/