js迭代器生成器

迭代器

是一个可以遍历或访问一个数据集合(如数组、对象等)的对象。包含next()方法,该方法返回具有两个属性的对象:valuedonevalue表示序列中的下一个值,而done则表示是否已经迭代到了序列的末尾。

生成器

是一种特殊的函数,它可以暂停和恢复执行。调用生成器函数会返回一个生成器对象,这是一个特殊的迭代器。不同于普通函数,生成器允许我们在函数体内使用yield关键字来暂停函数的执行,并在适当的时候恢复执行。

简而言之,迭代器是一种用于遍历数据集合的工具,而生成器则是一种特殊的函数,它允许我们在函数体内控制代码的执行流程。这两者通常一起使用,以实现更加灵活和高效的代码编写。

区别和用法

普通函数一旦执行 函数体从上往下依次执行

    function f() {

        console.log(1)

        console.log(2)

        console.log(3)

    }

     f()

生成器函数(generator)-生成迭代器(Iterator)的函数,配合yield关键字来控制代码执行流程
    function* go(str) {
      console.log(1)
      let a = yield str
      console.log(2)
      let b = yield a
      console.log(3)
      return b
    }


    const it = go('hehe') // it拿到生成器函数返回值
    console.log(it)
    const r1 = it.next(1) // next(参数) 赋值给上一次yield
    console.log(r1)
    const r2 = it.next(2)
    console.log(r2)
    const r3 = it.next(3)
    console.log(r3)
    function* test(num) {
      let x = 3 * (yield num + 1) + 5  // yield后面的表达式作为本次next返回值的value属性值
      let y = yield x / 3
      return x + y + num
    }

    let n = test(3)
    console.log(n.next()) // {value: 4, done: false}
    console.log(n.next(5)) // {value: 5, done: false}
    console.log(n.next(8)) // {value: 26, done: true}

    执行过程:
      test(3) 拿到迭代器,3传给num
      第一次 n.next() ,函数开始执行,遇到第一个yield停下来,
             把yield后面的表达式值作为next方法的返回值中value属性值
      第二次 n.next(5) 函数继续执行,
             5赋值给上一次yield整体, x =  3 *  5,又遇见yield  5 ,
             把yield后面的表达式值作为next方法的返回值中value属性值
      第三次 n.next(8) 函数继续执行 
             8赋值给上一次yield整体,y = 8 ,返回15+8 + 3 ,函数执行完毕,
             把返回值赋值给next方法的返回值中value属性值
    
    

 

 

你可能感兴趣的:(javascript,前端,开发语言)