内容预警,低级内容,菜鸟必看,大佬请绕道
在学习es6的新语法的时候,我相信不管你买什么书,里面一定有很长很长的章节在介绍【迭代器和生成器】,新手对于这两个名词真的非常陌生,即便看过所有的章节也云里雾里。所以忍不住大声问,迭代器和生成器到底是个啥?
简单来说(虽然这么说不准确,但是对于新手形成一个概念还是很有用的),
迭代器是一个方法,让变量可以循环遍历,这个变量就是可迭代对象
比如我们常用的用来遍历的方法 for....of,就是依赖于迭代器实现的,请参考我的这篇文章
javascipt中对象和数组的遍历,for in 和for of的区别是什么_我有一棵树的博客-CSDN博客_for in遍历数组拿不到javascipt中对象的遍历,for in 和for of的区别是什么https://blog.csdn.net/qq_17335549/article/details/128050897
迭代器很好理解,但是生成器就很晦涩难懂了,至少对于我来说是这样的
生成器是可以控制函数暂停、继续执行的函数,生成器是一种特殊的迭代器
- 生成器是函数
- 在函数名称前加一个 * ,就代表是生成器函数
- 使用 yield 暂停函数的执行
- 使用 next() 继续执行函数
所以生成器到底有啥用啊?
还是没懂,其实可以这么理解,迭代器和生成器是一个底层的原理问题,比如我们在使用for ...of 的时候,如果你就直接用当然也没有问题,但是你要知道for...of的原理是迭代器,一般来说我们菜鸟的开发过程根本不会让你去写一个迭代器和生成器。
所以这个是一个原理知识,而生成器可以用来产出迭代器,- async/await 就是生成器的使用例子
ES6 入门教程https://es6.ruanyifeng.com/#docs/async
当然大佬肯定会自己写生成器函数实现一些高深的问题,但是这不是我们菜鸟需要知道的东西。
更多内容,请参考
es6 generator到底有什么用? - 知乎有没有个直观的解释https://www.zhihu.com/question/55810122