今天这篇文章让我感到非常的兴奋,接下来我们将一起领略ES6中最具魔力的特性。
为什么说是“最具魔力的”?对于初学者来说,此特性与JS之前已有的特性截然不同,可能会觉得有点晦涩难懂。但是,从某种意义上来说,它使语言内部的常态行为变得更加强大,如果这都不算有魔力,我不知道还有什么能算。
不仅如此,此特性可以极大地简化代码,它甚至可以帮助你逃离“回调地狱”。
既然新特性如此神奇,那么就一起深入了解它的魔力吧!
ES6生成器(Generators)简介:
什么是生成器?
我们从一个示例开始:
function* quips(name) { yield "你好 " + name + "!"; yield "希望你能喜欢这篇介绍ES6的译文"; if(name.startsWith("X")) { yield "你的名字 " + name + " 首字母是X,这很酷!"; } yield "我们下次再见!"; }
这段代码很可能代表着当今互联网上最重要的一类应用,如果感到困惑,可以点击这里查看,然后再回来接着阅读。
这段代码看起来很像一个函数,我们称之为生成器函数,它与普通函数有很多共同点,但是二者有如下区别:
- 普通函数使用function声明,而生成器函数使用function*声明。
- 在生成器函数内部,有一种类似return的语法:关键字yield。二者的区别是,普通函数只可以return一次,而生成器函数可以yield多次(当然也可以只yield一次)。在生成器的执行过程中,遇到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程序员你一定深谙此道。
.....
时间: 2024-12-28 16:27:04