• 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 }
    

      

  • 相关阅读:
    BigDecimal.setScale 处理java小数点
    JS判断用户手机是IOS还是Android
    h5 移动端 监听软键盘弹起、收起
    【java】查重类的实现
    MySQL ORDER BY IF() 条件排序
    版本回退
    Log4j 配置某个类中某个方法的输出日志到指定文件
    简单地实现文章的查重
    simhash算法
    mysql中 for update 使用
  • 原文地址:https://www.cnblogs.com/413xiaol/p/11129240.html
Copyright © 2020-2023  润新知