ES6初步了解生成器

news/2024/7/11 1:18:58 标签: 1024程序员节, javascript, es6

生成器函数是ES6提供的一种异步编程解决方案,语法行为与传统函数完全不同
语法: function * fun(){ }

javascript">    function * gen(){
        console.log("hello generator");
    }
    let iterator =gen()
    console.log(iterator)

打印:
在这里插入图片描述
我们发现没有打印”hello generator“
我们需要使用到next方法
如果大家对迭代器感兴趣大家可以阅读这篇ES6初步了解迭代器

javascript">    function * gen(){
        console.log("hello generator");
    }
    let iterator =gen()
    iterator.next()

在这里插入图片描述
我们可以使用yield,可以看作是函数代码的分隔符

javascript">    function * gen(){
        console.log(111)
        yield "hello"
        console.log(222)
        yield "generator"
        console.log(333)
        yield "!"
        console.log(444)
    }
    let iterator =gen()
    iterator.next() //111
    iterator.next() //222
    iterator.next() //333
    iterator.next() //444

我们也可以使用for…of来遍历

javascript">    function* gen() {
        yield "hello"
        yield "generator"
        yield "!"
    }
    for (let v of gen()) {
        console.log(v)
    }

在这里插入图片描述

生成器函数的参数传递

javascript">    function* gen(arg) {
        console.log(arg)
        yield 111
        yield 222
        yield 333
    }
    // 执行获取迭代器对象
    let iterator = gen("aaa")
    console.log(iterator.next()) 

在这里插入图片描述

next方法可以传入实参

javascript">    function* gen(arg) {
        console.log(arg) //AAA
        let one = yield 111
        console.log(one) //BBB
        let two = yield 222
        console.log(two) //CCC
        let three = yield 333
        console.log(three) //DDD
    }
    // 执行获取迭代器对象
    let iterator = gen("AAA")
    console.log(iterator.next())
    // 第二次调next方法传入这个实参作为第一个yield语句的返回结果
    console.log(iterator.next("BBB"))
    // 第三次调next方法传入这个实参作为第二个yield语句的返回结果
    console.log(iterator.next("CCC"))
    // 第四次调next方法传入这个实参作为第三个yield语句的返回结果
    console.log(iterator.next("DDD")) 
    // 以此类推

在这里插入图片描述
感谢大家的阅读,如有不对的地方,可以向我指出,感谢大家!


http://www.niftyadmin.cn/n/5119410.html

相关文章

互联网金融 个人身份识别技术要求

文章目录 术语缩略语个人身份识别技术框架框架与各组部分的作用个人身份识别实现的主要功能 个人身份识别凭据技术要求概述记忆凭据类静态口令生成要求使用要求设备要求及安全要求 预设问题回答生成要求使用要求 OPT令牌生成要求使用要求安全要求 数字证书无硬介质证书生成要求…

linux vim 删除多行

使用linux服务器,免不了和vi编辑打交道,命令行下删除数量少还好,如果删除很多,光靠删除键一点点删除真的是头痛,还好Vi有快捷的命令可以删除多行、范围。 删除行 在Vim中删除一行的命令是dd。 以下是删除行的分步说明…

重装win11,个人记录详细步骤-干货

重装win11,个人记录详细步骤-干货 下载镜像-windows官网 https://www.microsoft.com/zh-cn/software-download/windows11%20 安装的选这个就行 虽然他这里写的是家庭版,进去里面就可以选择其他版本 重装win11有个前提 系统最低要求 本文列出了 Windo…

linux系统安装Googletest单元测试框架

环境信息 系统:ubuntn cmake版本:3.5.1 gcc版本:5.4.0 1、下载googletest git clone https://github.com/google/googletest.git注意!不选branch的话默认下载最新版本(需要编译器能够支持C14),…

VBA_MF系列技术资料1-212

MF系列VBA技术资料 为了让广大学员在VBA编程中有切实可行的思路及有效的提高自己的编程技巧,我参考大量的资料,并结合自己的经验总结了这份MF系列VBA技术综合资料,而且开放源码(MF04除外),其中MF01-04属于定…

Warning: ‘Destination Folder‘ contains 1 space.【Anaconda安装】

报错内容如下: 意思就是说你的安装路径下不要有空格哈哈,有空格就不行,比如: "D:\Program Files\Anaconda3"中间就有空格,Program与Files之间。 换个路径,例如: 就可以了。

进程 概念和理解 - Linux 是怎么做到 管理进程的?-fork 手动创建进程

前言 上一篇博客当中,对 冯诺依曼体系结构 和 操作系统 进行了简要概述,本篇博客将会从上一篇博客的基础之上进行展开,如果你有些不了解的话,建议先看上一篇博客再看本篇博客: 冯诺依曼体结构 - 为什么要有操作系统-…

CICD(2)——pipeline语法(2)

一、简介 本篇文章继自上一篇文章,仍用于记录学习CICD时的yaml配置文件语法规则 二、关键字 tags/allow_failure/when/retry/timeout/parallel 1. tags 用于从允许运行该项目的所有Runner列表中选择特定的Runner,在Runner注册期间,您可以指定Runner…