zoukankan      html  css  js  c++  java
  • JS Generator yield

    function show() {
        console.log('a')
        console.log('b')
    }
    show() // 普通函数
    
    function *show2() {
        console.log('1')
        yield
        console.log('2')
    }
    let genObj = show2() //返回的是指针对象
    genObj.next() // 1
    genObj.next() // 2
    genObj.next()
    

      

    需要调用next()方法启动执行,需要遇到 yield 停

    generator函数前面加一个 * 两边可以有空格,或靠近函数或function

    如果函数前漏掉 *

    • 就是普通函数
    • 如果有yield会报错, ReferenceError: yield is not defined
    • yield 只能在Generator函数内部使用

    yield

    • 既可传参,又可以返回
    • 第一个next()传参无效,只用来启动

    给yield穿参数

    function * show() {
        console.log('1')
        var a = yield
        console.log('2')
        console.log(a)
    }
    
    var gen = show()
    gen.next() // 1
    gen.next() // 2 和 undefined
    
    var gen = show()
    gen.next(10) // 1
    gen.next(20) // 2 和 20 

    如果要给第一个yield前的语句传参,可以把参数加在函数里,但是这个参数是整个生成器共享,即第二个yield也可以拿到

    function * show(p) {
        console.log('1')
    	console.log(p)
        var a = yield
        console.log('2')
        console.log(a)
    	console.log(p)
    }
    
    var gen = show(10)
    gen.next() 		// 1 和 10
    gen.next(20) 	     // 2 和 20 10
    

      

    利用yield返回值 

    // yield 返回
    function * show() {
        console.log('1')
        yield 10
        console.log('2')
    }
    
    var gen = show()
    var res1 = gen.next()
    console.log(res1) // { value: 10, done: false }
    var res2 = gen.next()
    console.log(res2) // { value: undefined, done: true }

     

    如果要给最后一个yield执行后返回值,可以利用return

    function * show() {
        console.log('1')
        yield 10
        console.log('2')
        return 20
    }
    // yield 返回
    var gen = show()
    var res1 = gen.next()
    console.log(res1) // { value: 10, done: false }
    var res2 = gen.next()
    console.log(res2) // { value: 20, done: true }
    

      

  • 相关阅读:
    [整] Android Fragment 生命周期图
    [原]Android Fragment 入门介绍
    [原]Android开发优化-Adapter优化
    [整] Android ListView 去除边缘阴影、选中色、拖动背景色等
    [整]Android开发优化-布局优化
    [原]Android 初遇Http错误 httpClient.execute
    [转]Android ANR 分析解决方法
    [整]Android SlidingMenu Demo 环境搭建
    RabbitMQ教程
    【centos7】添加开机启动服务/脚本
  • 原文地址:https://www.cnblogs.com/413xiaol/p/11129240.html
Copyright © 2011-2022 走看看