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 }
    

      

  • 相关阅读:
    leetcode-383-Ransom Note(以空间换时间)
    AtCoder
    AtCoder
    Hadoop序列化案例实操
    Java实现MapReduce Wordcount案例
    HDFS常用API操作 和 HDFS的I/O流操作
    HBase常用的JAVA API操作
    ZooKeeper之服务器动态上下线案例
    机器学习(6)——逻辑回归
    机器学习(5)——多项式回归与模型泛化
  • 原文地址:https://www.cnblogs.com/413xiaol/p/11129240.html
Copyright © 2011-2022 走看看