在一篇描述JavaScript中的生成器和迭代器的MDN文章中找到了片段here。
function simpleGenerator(){
yield "first";
yield "second";
yield "third";
for (var i = 0; i < 3; i++)
yield i;
}
var g = simpleGenerator();
print(g.next()); // prints "first"
print(g.next()); // prints "second"
print(g.next()); // prints "third"
print(g.next()); // prints 0
print(g.next()); // prints 1
print(g.next()); // prints 2
print(g.next()); // StopIteration is thrown
上面我们读到:
yield关键字仅适用于包含在
中的HTML中的代码块
<script type="application/javascript;version=1.7">
阻止(或更高版本)。
实际上,当嵌入HTML文件并包含在上述标记中时,该代码段工作正常。问题是,我在Rhino中尝试过,它似乎不能在HTML和浏览器之外工作。
那么如何在浏览器之外使用生成器?
答案 0 :(得分:2)
https://developer.mozilla.org/en/New_in_Rhino_1.7R1#JavaScript_1.7_features
要启用JavaScript 1.7支持,您必须使用
Context.setLanguageVersion()
API调用将版本设置为170。如果您使用的是Rhino shell,则可以在命令行中指定-version 170
或在shell执行的代码中调用version(170)
。
答案 1 :(得分:0)
改变背景:
Context ctx = Context.enter();
ctx.setLanguageVersion(Context.VERSION_1_7);
try {
CompilerEnvirons compEnv = new CompilerEnvirons();
compEnv.initFromContext(ctx);
...
}
finally { Context.exit(); }