标签:font span 生成器 学习笔记 区别 意义 generator one code
今天这篇文章让我感到非常的兴奋,接下来我们将一起领略ES6中最具魔力的特性。
为什么说是“最具魔力的”?对于初学者来说,此特性与JS之前已有的特性截然不同,可能会觉得有点晦涩难懂。但是,从某种意义上来说,它使语言内部的常态行为变得更加强大,如果这都不算有魔力,我不知道还有什么能算。
不仅如此,此特性可以极大地简化代码,它甚至可以帮助你逃离“回调地狱”。
既然新特性如此神奇,那么就一起深入了解它的魔力吧!
什么是生成器?
我们从一个示例开始:
function* quips(name) { yield "你好 " + name + "!"; yield "希望你能喜欢这篇介绍ES6的译文"; if(name.startsWith("X")) { yield "你的名字 " + name + " 首字母是X,这很酷!"; } yield "我们下次再见!"; }
这段代码很可能代表着当今互联网上最重要的一类应用,如果感到困惑,可以点击这里查看,然后再回来接着阅读。
这段代码看起来很像一个函数,我们称之为生成器函数,它与普通函数有很多共同点,但是二者有如下区别:
这就是普通函数和生成器函数之间最大的区别,普通函数不能自暂停,生成器函数可以。
当你调用quips()生成器函数时发生了什么?
> var iter = quips("jorendorff"); [object Generator]; > iter.next(); { value: "你好 jorendorff!", done: false }; > iter.next(); { value: "希望你能喜欢这篇介绍ES6的译文", done: false }; > iter.next(); { value: "我们下次再见!", done: false }; > iter.next(); { value: undefined, done: true };
你大概已经习惯了普通函数的使用方式,当你调用它们时,它们立即开始运行,直到遇到return或抛出异常时才退出执行,作为JS程序员你一定深谙此道。
.....
标签:font span 生成器 学习笔记 区别 意义 generator one code
原文地址:http://www.cnblogs.com/tanxiang6690/p/7417550.html