ES6的yield示例分析
创始人
2024-12-16 06:42:03
0次

  近期ES6标准如火如荼的发展,其中主要还是各大浏览器的支持,最重要厂商支付宝,微信的支持,使得国内的发展也很迅猛。这里主要是对yield关键字的,yield实际上可以看作是一种新的中断机制,大家都知道javascript函数执行是顺序的,中途没有暂停,等待消息只能通过回调或者settimeout等延迟检查来完成。

  对ES6的yield示例分析

  有些示例说yield和线程有关系,不过我在官方示例中没看出来,好了进入主题,先来看看官方示例。

  function*foo(x){

  vary=2*(yield(x+1));

  varz=yield(y/3);

  return(x+y+z);

  }

  varit=foo(5);

  console.log(it.next());

  console.log(it.next(12));

  console.log(it.next(13));

  //返回值是{value:6,done:false},{value:8,done:false},{value:42,done:true}

  yield示例要点

  第一点:foo需要是*型的,新增的*带来的是这个函数指针,这个函数必须是*型的,否则的话varit=foo(5),就表示得到函数执行的结果,而指针型的,表示it取得该函数。

  第二点:第一个it.next()表示开始执行函数,直到第一个yield停止。返回值是yield(表达式的值),这个时候的返回时是x+1,x是5,结果就是6.这里的it.next如果带参数,则参数会被忽略,因为首次执行没有参数可再传递.

  第三点:第二个it.next(12)表示上一个yield的返回结果是12,带进去也就是vary=2*12;这个地方必须带值,因为yield内是表达式(x+1),不是常量,无法自己计算,这里为什么不把之前的x缺省带进去计算,只能说目前的机制不是这样,

  应该是考虑到实现的复杂程序,因为这里的x是一个变量,实际运行中,这个还可能是表达式,甚至还有作用域的问题考虑,这里计算出的y=2*12=24,一直计算到下一个yield(24/3),结果是8。

  第四点:第三个it.next(13)同样表示上一个yield的返回结果是13,带进去也就是varz=13;后面已经没有yield了,就去函数的返回值return5+24+13,结果等于42,这个时候done的值是true,表示函数结束。

  重要的总结下:function需要是指针,记住yield(表达式)执行的结果是上一个执行的值。

  这样yield的关键字是不是清晰了?

  在实际工作中并不是it.next()一定要到函数最终的return,例如第一次执行it.next(),取得返回值不符合预期的值,可以直接不执行后期的next了,例如多层校验。

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...