gpt4 book ai didi

javascript - 带有 next() 调用的生成器函数

转载 作者:行者123 更新时间:2023-11-29 10:41:14 24 4
gpt4 key购买 nike

我从ecmascript 6看到了新的 future - 生成器函数,我对什么 .next() 有点困惑功能确实如此。

在官方文档中他们说,我引用:A zero arguments function that returns an object with two properties: , 信息更新于 Feb 17, 2015 4:57:46 PM根据他们的website (<- 链接到此处提供的文档)

那么,假设我们有这个生成器函数:

 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}

问题

  1. 你怎么可能调用.next()如果在官方文档中声明它是零参数函数,则带参数?
  2. 为什么第三个结果是value属性等于 1,而在第二次调用时它等于 2?
  3. 为什么 b 是 1 而不是 2?

谢谢!

PS: Of course, there's another usage of generator functions ( to avoid callbacks ), but I'm asking about this particular case. 

最佳答案

  1. How it's possible you can call .next() with parameter if in the official documentations it's stated it's a zero parameter function ?

引用draft version of ES-6 ,

Arguments may be passed to the next function but their interpretation and validity is dependent upon the target Iterator. The for-of statement and other common users of Iterators do not pass any arguments, so Iterator objects that expect to be used in such a manner must be prepared to deal with being called with no arguments.

因此,将参数传递给 next 并不违反 ES6 规范。在这种情况下,传递给 next 的值将分配给您要将 yield 表达式分配给的变量。

  1. Why at 3rd result has value property equal to 1 and at the second call it's equal to 2?
  2. Why b is 1 and not 2 ?

按发生顺序排列的操作列表

  1. f.next()

    yield "HELLO"

    所以你得到 { value: 'HELLO', done: false }

  2. f.next(1)

    var a = 1;
    console.log("a = ", a);
    yield a + 1

    这就是您在此调用中得到 { value: 2, done: false } 的原因。

  3. f.next(1)

    var b = 1;
    console.log("b = ", b);
    return b

    这就是为什么你在这里得到 { value: 1, done: true }

关于javascript - 带有 next() 调用的生成器函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28743794/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com