Mr.J -- yield关键字&&生成器产生值

本文详细探讨了JavaScript中的`yield`关键字及其在生成器(generator)中的作用。`yield`使得函数暂停并返回一个值,同时可以通过`next()`函数控制生成器的执行流程。文章介绍了闭包实现、数字序列生成器以及如何通过`next()`函数传递参数。此外,还讨论了如何停止生成器,包括捕获异常和外部中止的方法。
摘要由CSDN通过智能技术生成

yield是什么

  • yield是ES6的新关键字,使生成器函数执行暂停,yield关键字后面的表达式的值返回给生成器的调用者。它可以被认为是一个基于生成器的版本的return关键字。
  • yield关键字实际返回一个IteratorResult(迭代器)对象,它有两个属性,value和done,分别代表返回值和是否完成。
  • yield无法单独工作,需要配合generator(生成器)的其他函数,如next,懒汉式操作,展现强大的主动控制特性。
  • 如果你看到某个函数中有yield,说明这个函数已经是个生成器了
  • yield可以用来加强控制,懒汉式加载
  • 调用函数指针和调用生成器是两码事,在下面的demo中会发现这一问题。
  • 需要next()函数配合使用,每次调用返回两个值:分别是value和done,代表迭代结果和是否完成
  • 函数next()是个迭代器对象,传参可以缺省,默认调用函数。

简单的小demo

function *foo(x){
         var y = x*(yield "Hello");
         return y;
     }
 
     var it = foo(6);
 
     //不传任何东西
     var res = it.next();
     console.log(res.value);
 
     //等待的yield传入7
     var res = it.next(7);
     console.log(res.value);   

yield说明

  • yield并不能直接生产值,而是产生一个等待输出的函数
  • 除IE外,其他所有浏览器均可兼容(包括win10 的Edge)
  • 某个函数包含了yield,意味着这个函数已经是一个Generator
  • 如果yield在其他表达式中,需要用()单独括起来
  • yield表达式本身没有返回值,或者说总是返回undefined(由next返回)
  • next()可无限调用ÿ
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值