我知道yield*
可以用来撰写generator
,就像这样
function* foo() {
yield* bar();
yield 1;
}
function* bar() {
yield 2;
}
但是如果我有一些正常的函数yield
一个值。
function xx()
{
yield 1;
}
v8说
yield 1;
^
SyntaxError: Unexpected number`
这是否意味着yield
仅保存generator
的环境,而不是完整的调用堆栈,并且无法停止和恢复像生成器这样的正常函数?
我在FireFox(SpiderMonkey)中听到,yield
可用于与ES6不兼容的普通功能。
答案 0 :(得分:3)
是的,yield
仅适用于生成器。生成器在ES6中标记为*
,而早于在ES6草案之前的SpiderMonkey实现中并非如此。这就是为什么你可以在SpiderMonkey中的“普通”函数中使用yield
- 然后它根本就不正常,但实际上是一个生成器。
IOW,在任何一种情况下,yield
都属于一个生成器。并且它总是产生一个浅的,一次性的延续(但你可以用yield*
明确委托。)