当前位置 > it书童 > 大前端 > 正文
推荐小册
java高效编程
怎样更高效地用 java 编程

juc并发工具库
java并发编程工具库

设计模式
设计模式

jvm调优
jvm调优

rabbitmq实战
rabbitmq实战

redis实战
redis实战

Keepavlied高可用集群
Keepavlied高可用集群

nginx入门到实战
nginx入门到实战

java调试
java调试中遇到的各种坑

java输入输出流
java输入输出流

generate 的基本语法 yield 与 next

大前端 it书童 2020-10-06 14:21:18 0赞 0踩 314阅读 0评论

yield 关键字的用法

只能在生成器中使用

function * gen () {
  let val
  val = yield 1
  console.log(val)
}

const l = gen()
l.next() // 无任务输出
l.next() // undefined

执行遇到 yield 就停下来

next() 找 yield 或 函数的结尾,遇到时就暂停

第一次 next(), 执行到 val = yield 1 时就停下来

第二次 next(), 从第一次暂停的位置继续执行

yield 表达式没有返回值,所以 val = yield 1,对于 val 并不能赋值成功

yield 后面还可以加星号 *

function * gen () {
  let val
  val = yield * [1, 2, 3]
  console.log(val)
}

const l = gen()
// 依然是无输出
l.next()
l.next()

首先弄明白 next() 到底是干什么的

function * gen () {
  let val
  val = yield * [1, 2, 3]
  console.log(val)
}

const l = gen()
console.log(l.next()) // {value: 1, done: false}
console.log(l.next()) // {value: 2, done: false}

加 * 和不加 * 的输出区别

function * gen () {
  let val
  val = yield [1, 2, 3]
  console.log(val)
}

const l = gen()
console.log(l.next()) // {value: Array(3), done: false}
console.log(l.next()) // {value: undefined, done: true}

next() 用于控制函数的恢复执行,返回的:

  1. 当前遍历的值是什么

  2. 循环是否已经结束

yield 加 * 表示,后面加的是遍历的对象,即 * 后面可以是一个 generate 对象

关于我
一个文科出身的程序员,追求做个有趣的人,传播有价值的知识,微信公众号主要分享读书思考心得,不会有代码类文章,非程序员的同学请放心订阅
转载须注明出处:https://www.itshutong.com/articles/767/yield-and-next-the-basic-syntax-of-generate