Javascript 具有next()调用的生成器函数
我从Javascript 具有next()调用的生成器函数,javascript,ecmascript-6,Javascript,Ecmascript 6,我从ecmascript 6-生成器函数中看到了新的未来,我对.next()函数的功能有点困惑 在官方文档中,他们说,我引用:一个零参数函数,返回一个具有两个属性的对象:,信息更新日期为2015年2月17日下午4:57:46,根据他们的( 如果在官方文档中声明它是一个零参数函数,那么如何使用参数调用.next() 引用 参数可以传递给next函数,但它们的解释和有效性取决于目标迭代器。for of语句和迭代器的其他普通用户不传递任何参数,因此预期以这种方式使用的迭代器对象必须准备好处理c毫无争议
ecmascript 6
-生成器函数中看到了新的未来,我对.next()
函数的功能有点困惑
在官方文档中,他们说,我引用:一个零参数函数,返回一个具有两个属性的对象:
,信息更新日期为2015年2月17日下午4:57:46,根据他们的(
如果在官方文档中声明它是一个零参数函数,那么如何使用参数调用.next()
引用
参数可以传递给next
函数,但它们的解释和有效性取决于目标迭代器。for of
语句和迭代器的其他普通用户不传递任何参数,因此预期以这种方式使用的迭代器对象必须准备好处理c毫无争议地被传唤
因此,将参数传递给next
并不违反ES6规范。在这种情况下,传递给next
的值将被分配给正在分配yield
表达式的变量
f.next()
yield "HELLO"
var a = 1;
console.log("a = ", a);
yield a + 1
var b = 1;
console.log("b = ", b);
return b
所以您得到的是{value:'HELLO',done:false}
f.next(1)
yield "HELLO"
var a = 1;
console.log("a = ", a);
yield a + 1
var b = 1;
console.log("b = ", b);
return b
这就是为什么您在这个调用中得到{value:2,done:false}
f.next(1)
yield "HELLO"
var a = 1;
console.log("a = ", a);
yield a + 1
var b = 1;
console.log("b = ", b);
return b
这就是为什么您在这里得到{value:1,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();
console.log('1:',f.next());
console.log('2:',f.next(5));
console.log('3:',f.next(7));
输出
///1st next()
//yeld returns iterator
{value: "HELLO", done: false}
//2nd next(5)
//the console log gets executed with var a = 5
a = 5
//yeld returns iterator
{value: 6, done: false}
//3rd next(7)
//the console log gets executed with var b = 7
b = 7
//it doesn't use the 'a' var at all, neither does it add +1 to the yeld allocation
//yeld returns iterator
{value: 7, done: true}
是的,但是var b=yield a+1?不应该是2吗?@Kosmo我编辑了我的答案,它回答了你的问题吗?是的!谢谢!我现在更了解这个概念虽然MDN是JavaScript的好来源,但你不能说它是“官方的”文档。真正官方的只是ECMAScript规范。我不知道。我从上面的人那里得到了一个链接。谢谢!