yield in js

// yield IE浏览器不兼容哦 但是IE edge兼容
// 碰到yield就停止,生成yield对象,对象的value属性是yield后面的值
function* yieldTest () {
  let array = [5, 4, 3]
  for (let i = 0; i < array.length; i++) {
    yield array[i] // yield使生成器函数暂停执行,yield实际返回的是迭代器对象
  }
}

// 在判断语句中应用next()会消耗迭代的次数,每次判断都会消耗
// 如果yield在其他表达式中,需要用()单独括起来
// 不可以直接传递yield值
// console.log('开始构造了')
// console.log(yieldTest)
//
let itemTest = yieldTest()
// console.log(itemTest)

console.log(itemTest.next()) // yield本身没有返回值(undefined),有返回值的是next(),next可以无限次调用,但是迭代完成后均返回undefined
console.log(itemTest.next()) // yield和next需要配合使用
console.log(itemTest.next()) // 返回两个参数,一个是返回值,一个是是否完成
console.log(itemTest.next()) // 返回值是undefined时候,才表示已经结束了


function* yieldTry () {
  for (let i = 0; true; i++) {
    var reset = yield i
    if(reset) {
      i = -1
    }
  }
}
let yieldItem = yieldTry()
// console.log(yieldItem.next())
// console.log(yieldItem.next())
// console.log(yieldItem.next())
// console.log(yieldItem.next())
// console.log(yieldItem.next())
// console.log(yieldItem.next())
// console.log(yieldItem.next(true))
// console.log(yieldItem.next(true))
// console.log(yieldItem.next(false))

// 越来越难以理解
function* yieldMath (x) {
  var y = 2 * (yield (x + 1))
  var z = yield(y / 3)
  console.log('x=' + x + ',y=' + y + ',z=' + z)
  return (x + y + z)
  // console.log('final result:' + (x + y + z))
}

// var a = yieldMath(5)
// a.next()
// a.next()
// a.next()
//
// var b = yieldMath(5)
// console.log(b.next())
// console.log(b.next(12))
// console.log(b.next(13))
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值