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")) 
    // 以此类推

感谢大家的阅读,如有不对的地方,可以向我指出,感谢大家!

相关推荐
惜.己34 分钟前
javaScript基础(8个案例+代码+效果图)
开发语言·前端·javascript·vscode·css3·html5
长天一色1 小时前
【ECMAScript 从入门到进阶教程】第三部分:高级主题(高级函数与范式,元编程,正则表达式,性能优化)
服务器·开发语言·前端·javascript·性能优化·ecmascript
NiNg_1_2342 小时前
Vue3 Pinia持久化存储
开发语言·javascript·ecmascript
读心悦2 小时前
如何在 Axios 中封装事件中心EventEmitter
javascript·http
神之王楠2 小时前
如何通过js加载css和html
javascript·css·html
余生H2 小时前
前端的全栈混合之路Meteor篇:关于前后端分离及与各框架的对比
前端·javascript·node.js·全栈
流烟默3 小时前
Vue中watch监听属性的一些应用总结
前端·javascript·vue.js·watch
茶卡盐佑星_3 小时前
meta标签作用/SEO优化
前端·javascript·html
与衫3 小时前
掌握嵌套子查询:复杂 SQL 中 * 列的准确表列关系
android·javascript·sql
金灰3 小时前
HTML5--裸体回顾
java·开发语言·前端·javascript·html·html5