【ES】笔记-生成器函数与调用

这篇具有很好参考价值的文章主要介绍了【ES】笔记-生成器函数与调用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

function*

function* 这种声明方式 (function关键字后跟一个星号)会定义一个生成器函数 (generator function),它返回一个 Generator 对象。

     function * gen(){
            console.log("heloo generator")
        }

如何调用呢?先看下里面的内容
【ES】笔记-生成器函数与调用,# ECMAScript,笔记,javascript,前端
返回一个这个生成器的 迭代器 ( iterator )对象。

 iterator.next();

【ES】笔记-生成器函数与调用,# ECMAScript,笔记,javascript,前端

语法

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/function*
语法

function* name([param[, param[, … param]]]) { statements }

name
函数名

param
要传递给函数的一个参数的名称,一个函数最多可以有 255 个参数。

statements
普通 JS 语句。

描述
生成器函数在执行时能暂停,后面又能从暂停处继续执行。

调用一个生成器函数并不会马上执行它里面的语句,而是返回一个这个生成器的 迭代器 ( iterator )对象。当这个迭代器的 next() 方法被首次(后续)调用时,其内的语句会执行到第一个(后续)出现yield的位置为止,yield 后紧跟迭代器要返回的值。或者如果用的是 yield*(多了个星号),则表示将执行权移交给另一个生成器函数(当前生成器暂停执行)。

next()方法返回一个对象,这个对象包含两个属性:value 和 done,value 属性表示本次 yield 表达式的返回值,done 属性为布尔类型,表示生成器后续是否还有 yield 语句,即生成器函数是否已经执行完毕并返回。

调用 next()方法时,如果传入了参数,那么这个参数会传给上一条执行的 yield 语句左边的变量

next调用

        function * gen(){
            // console.log(111);
            yield '一只没有耳朵';
            // console.log(222);
            yield '一只没有尾部';
            // console.log(333);
            yield '真奇怪';
            // console.log(444);
        }

        let iterator = gen();
        console.log(iterator.next());
        console.log(iterator.next());
        console.log(iterator.next());
        console.log(iterator.next());

【ES】笔记-生成器函数与调用,# ECMAScript,笔记,javascript,前端

遍历

既然是迭代器,就可以采用for of遍历。

        function * gen(){
            yield '一只没有耳朵';
            yield '一只没有尾部';          
            yield '真奇怪';
        }
        let iterator=gen();
        //遍历
        for(let v of gen()){
            console.log(v);
        }

【ES】笔记-生成器函数与调用,# ECMAScript,笔记,javascript,前端

生成器接收参数

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>生成器函数参数</title>
</head>
<body>
    <script>
        function * gen(arg){
            console.log(arg);
            let one = yield 111;
            console.log(one);
            let two = yield 222;
            console.log(two);
            let three = yield 333;
            console.log(three);
        }

        //执行获取迭代器对象
        let iterator = gen('AAA');
        console.log(iterator.next());
        //next方法可以传入实参
        console.log(iterator.next('BBB'));
        console.log(iterator.next('CCC'));
        console.log(iterator.next('DDD'));
        
    </script>
</body>
</html>

【ES】笔记-生成器函数与调用,# ECMAScript,笔记,javascript,前端

异步编程

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>生成器函数实例</title>
</head>

<body>
    <script>
        // 异步编程  文件操作 网络操作(ajax, request) 数据库操作
        // 1s 后控制台输出 111  2s后输出 222  3s后输出 333 
        // 回调地狱
        // setTimeout(() => {
        //     console.log(111);
        //     setTimeout(() => {
        //         console.log(222);
        //         setTimeout(() => {
        //             console.log(333);
        //         }, 3000);
        //     }, 2000);
        // }, 1000);

        function one(){
            setTimeout(()=>{
                console.log(111);
                iterator.next();
            },1000)
        }

        function two(){
            setTimeout(()=>{
                console.log(222);
                iterator.next();
            },2000)
        }

        function three(){
            setTimeout(()=>{
                console.log(333);
                iterator.next();
            },3000)
        }

        function * gen(){
            yield one();
            yield two();
            yield three();
        }

        //调用生成器函数
        let iterator = gen();
        iterator.next();

    </script>
</body>

</html>

生成器函数实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>生成器函数</title>
</head>
<body>
    <script>
        //模拟获取  用户数据  订单数据  商品数据 
        function getUsers(){
            setTimeout(()=>{
                let data = '用户数据';
                console.log(data);
                //调用 next 方法, 并且将数据传入
                iterator.next(data);
            }, 1000);
        }

        function getOrders(){
            setTimeout(()=>{
                let data = '订单数据';
                console.log(data);
                iterator.next(data);
            }, 1000)
        }

        function getGoods(){
            setTimeout(()=>{
                let data = '商品数据';
                console.log(data);
                iterator.next(data);
            }, 1000)
        }

        function * gen(){
            let users = yield getUsers();
            let orders = yield getOrders();
            let goods = yield getGoods();
        }

        //调用生成器函数
        let iterator = gen();
        iterator.next();

        

    </script>
</body>
</html>

【ES】笔记-生成器函数与调用,# ECMAScript,笔记,javascript,前端文章来源地址https://www.toymoban.com/news/detail-683490.html

到了这里,关于【ES】笔记-生成器函数与调用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ES6生成器,看似同步的异步流程控制表达风格

    本文分享自华为云社区《3月阅读周·你不知道的JavaScript | ES6生成器,看似同步的异步流程控制表达风格》,作者: 叶一一。 JavaScript开发者在代码中几乎普遍依赖的一个假定:一个函数一旦开始执行,就会运行到结束,期间不会有其他代码能够打断它并插入其间。 ES6引入了

    2024年04月10日
    浏览(58)
  • 函数图像生成器 (吉林大学 孙立鑫)

    目录 函数图像生成器 1.直角坐标系 2.极坐标系 3.参数方程 a.角度(圆锥曲线) b.距离(直线)   在学习编程过程中,我们可能会遇见十分复杂的函数,因此我们需要强大的工具来辅助分析。这篇文章我们来深入讨论如何生成各种函数以及曲线方程的图像。   为了清晰简洁,

    2024年02月06日
    浏览(46)
  • python中函数,装饰器,迭代器,生成器

    1.函数可以作为参数进行传递 2.函数可以作为返回值进行返回 3.函数名称可以当成变量一样进行赋值操作 作用:在不改变原有函数调用的情况下,给函数增加新的功能          即可以在函数前面增加新的功能,但不改变原来的代码 可迭代的数据类型都会提供迭代器,即可以

    2024年02月07日
    浏览(44)
  • 若依笔记(四):代码生成器

    已知使用MyBatisPlus代码生成器可以自动生成Entity、Mapper、Service、Controller代码,前提是数据库中有数据表,生成pojo类以及对于该数据表的增删改查命令的代码,若依更进一步能选择表后生成代码、预览、下载,同时可以生产前端代码,与后端一起还能实现权限管理和数据隔离

    2024年02月06日
    浏览(53)
  • 伪随机生成器(rand函数),随机数种子(srand函数)详细解读与分析:

    a.生成随机数; b.生成0~100以内的随机数 c.随机数的连续输出及其连续输出情况讲解与分析 首先我们来看一下rand函数(伪随机数生成器):   rand函数,即伪随机数生成器,该函数返回类型为整型,没有参数,即产生一个在(0-rand_max(十六进制的ox7ffff转化为整数即32767)的一个

    2024年02月11日
    浏览(52)
  • 【python基础语法六】迭代器,生成器,推导式和高阶函数

    内置函数: dir 获取当前对象的内置成员 高阶函数 : 能够把函数当成参数传递的就是高阶函数 (map ,filter ,reduce , sorted) 案例: 1. enumerate 2. zip 元组推导式是生成器( generator ) (1) 基本语法 (2) 优化生成器代码 (3) send 的使用方式 (给上一个 yield 发送数据) (4) yield from 的使用 (5) 案例

    2024年02月02日
    浏览(47)
  • 【html】利用生成器函数和video元素,取出指定时间的视频画面

    有的时候想截取视频某一秒的视频画面。 手动截取操作麻烦,还得时刻关注视频播放时间。 于是,我搞出来了一个根据视频自动截取特定时间描述的页面。 获取视频对象 根据视频时长生成时间选择表单 根据表单选择的时间和视频地址,利用canvas和vido元素生成某一帧的视频

    2024年02月07日
    浏览(37)
  • 谷粒商城笔记+踩坑(1)——架构、项目环境搭建、代码生成器

     导航: 谷粒商城笔记+踩坑汇总篇_谷粒商城笔记踩坑6_vincewm的博客-CSDN博客 目录 1、项目介绍 1.1 微服务架构图 1.2. 微服务划分图 2、项目环境搭建 2.1. 虚拟机搭建环境 2.2. Linux安装docker、配置镜像加速 2.3. docker配置mysql、设置自启动 2.3.1、安装mysql5.7 2.3.2、修改mysql配置文件

    2024年02月01日
    浏览(84)
  • 手机通话记录生成器在线,通话记录生成器下载,通话记录生成器app

    在了解通话记录生成器app的时候,铁牛通话记录生成器是一个为用户一键自动生成通话记录的app。如何得到“铁牛通话记录生成器”?在手机上进去佰渡baidu搜嗦,铁牛通话记录生成器,这几个字就可以,其他的不用输入。或者你看这个几个字母jp155再加上一个点com,手动输入

    2024年02月08日
    浏览(92)
  • python3 生成器与生成器表达式

    在 Python3 中,生成器表达式是一种语言结构,它可以快速地创建一个可迭代对象。生成器表达式类似于列表推导式,但使用圆括号而不是方括号,并且返回的是一个生成器对象而不是一个列表。 在 Python3 中,生成器表达式有两种类型:生成器函数和生成器表达式。 生成器函

    2024年02月02日
    浏览(86)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包