【发布时间】:2015-02-26 13:29:46
【问题描述】:
我从 ecmascript 6 看到了新的未来 - 生成器函数,我对 .next() 函数的作用有点困惑。
在他们说的官方文档中,我引用了:A zero arguments function that returns an object with two properties:,根据他们的website 更新了Feb 17, 2015 4:57:46 PM 上的信息(<- 链接到此处提供的文档)
所以,假设我们有这个生成器函数:
function* first(){
yield 1;
yield 2;
}
var f= first();
调用f.next() 时将返回{value:1, done:false}。当你再次调用它时会返回{value:2, done:true}
但是,如果我们有这样的事情:
function* second() {
var a = yield "HELLO";
console.log("a = ", a);
var b = yield a+ 1;
console.log("b = ", b);
return b
}
var f= second();
当你这样称呼它时:f.next()你会收到{value: "HELLO", done: false}
下一个调用将是f.next(1),它会将1分配给a,它会输出{value: 2, done: false}
下一个调用将是f.next(1),它将输出{value: 1, done: true}
问题
- 如果在官方文档中声明它是一个零参数函数,你怎么可能用参数调用
.next()? - 为什么在第 3 个结果中,
value属性等于 1,而在第二个调用中,它等于 2? - 为什么 b 是 1 而不是 2?
谢谢!
PS: Of course, there's another usage of generator functions ( to avoid callbacks ), but I'm asking about this particular case.
【问题讨论】:
-
虽然 MDN 是 JavaScript 的一个很好的来源,但你不能说它是“官方”文档。真正正式的只有 ECMAScript 规范。
-
我不知道。我从上面的那个人那里得到了一个链接。谢谢!