生成器并在浏览器外“产生”

时间:2011-10-30 10:32:01

标签: javascript firefox mozilla rhino

在一篇描述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和浏览器之外工作。

那么如何在浏览器之外使用生成器?

2 个答案:

答案 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(); }