JS 基础之异步(四):Generator(生成器、迭代器源码实现)

本文深入探讨JavaScript中的Generator,解释其作为异步编程工具的角色。Generator函数创建的生成器对象遵循迭代器和可迭代协议。通过实例解析迭代器协议的next方法,以及如何使对象可迭代。同时介绍了yield*的用法,以及如何在Generator中实现可迭代协议,以支持在for...of循环中使用。
摘要由CSDN通过智能技术生成

Step3:Generator

Generator 是什么

**生成器(Generator)**对象是ES6中新增的语法,和Promise一样,都可以用来异步编程。但与Promise不同的是,它不是使用JS现有能力按照一定标准制定出来的,而是一种新型底层操作,async/await就是在它的基础上实现的。

generator对象是由generator function返回的,符合可迭代协议迭代器协议

generator function 可以在JS单线程的背景下,使JS的执行权与数据自由的游走在多个执行栈之间,实现协同开发编程,当项目调用generator function时,会在内部开辟一个单独的执行栈,在执行一个generator function 中,可以暂停执行,或去执行另一个generator function,而当前generator function并不会销毁,而是处于一种被暂停的状态,当执行权回来的时候,再继续执行。

在这里插入图片描述

可迭代协议迭代器协议都是ES6的补充

迭代器(Iterator)

顾名思义,所谓迭代器对象就是满足迭代器协议的对象。

迭代器协议

迭代器协议定义了一种标准的方式来产生一个有限或无限序列的值。使的迭代器对象拥有一个next()对象,并有以下含义:

  • next: 返回一个对象的无参函数,返回对象有两个属性:
    • done(boolean)
      • 如果迭代器已经经过了被迭代序列时为 true。这时value可能描述了该迭代器的返回值。
      • 如果迭代器可以产生序列中的下一个值,则为false。这等于说done属性不指定。
    • value
      • 迭代器返回的任何 JavaScript 值。done为true时可省略。

为了加深一下理解,下面贴出

迭代器构建版本一:Iterator的源码实现

// 源码实现
function createIterator(items) {
   
    var i = 0
    return {
   
        next: function() {
   
            var done = (i >= items.length)
            var value = !done ? items[i++] : undefined
            
            return {
   
                done: done,
                value: value
            }
        }
    }
}

// 应用
var iterator = createIterator([1, 2, 3])
console.
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值