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
    表达式的变量

  • 为什么在第三次调用时,value属性等于1,而在第二次调用时,它等于2
  • 为什么b是1而不是2
  • 按发生顺序排列的操作列表

  • 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规范。我不知道。我从上面的人那里得到了一个链接。谢谢!