您好,登录后才能下订单哦!
这篇文章主要讲解了“ES6的yield示例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ES6的yield示例分析”吧!
近期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了,例如多层校验。
感谢各位的阅读,以上就是“ES6的yield示例分析”的内容了,经过本文的学习后,相信大家对ES6的yield示例分析这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。