JavaScript中的迭代器

在软件开发领域,“迭代”的意思是按照顺序反复屡次执行一段程序,一般会有明确的终止条件。 ECMAScript 6规范新增了两个高级特性:迭代器和生成器。
在 JavaScript 中,计数循环就是一种最简单的迭代:java

for (let i = 1; i <= 10; ++i) {
console.log(i);
}

循环是迭代机制的基础,这是由于它能够指定迭代的次数,以及每次迭代要执行什么操做.迭代会在一个有序集合上进行。数组是 JavaScript 中有序集合的最典型例子。
迭代器模型
迭代器模式(特别是在 ECMAScript 这个语境下)描述了一个方案,便可以把有些结构称为“可迭代对象”( iterable),由于它们实现了正式的 Iterable 接口,并且能够经过迭代器 Iterator 消费。可迭代对象是一种抽象的说法。基本上,能够把可迭代对象理解成数组或集合这样的集合类型的对象。它们包含的元素都是有限的,并且都具备无歧义的遍历顺序:
生成器
生成器是 ECMAScript 6 新增的一个极为灵活的结构,拥有在一个函数块内暂停和恢复代码执行的
能力。这种新能力具备深远的影响,好比,使用生成器能够自定义迭代器和实现协程mysql

生成器的形式是一个函数,函数名称前面加一个星号( *)表示它是一个生成器。只要是能够定义函数的地方,就能够定义生成器。面试

// 生成器函数声明
        function* lvhang() {

        }
        // 生成器函数表达式
        let lvhang2 = function* () {

        }
// 做为对象字面量方法的生成器函数
let foo = {
* generatorFn() {}
}
// 做为类实例方法的生成器函数
class Foo {
* generatorFn() {}
}
// 做为类静态方法的生成器函数
class Bar {
static * generatorFn() {}
}

注意 箭头函数不能用来定义生成器函数。
调用生成器函数会产生一个生成器对象。生成器对象一开始处于暂停执行( suspended)的状态。与迭代器类似,生成器对象也实现了 Iterator 接口,所以具备 next()方法。调用这个方法会让生成器开始或恢复执行。
[迭代器是一个能够由任意对象实现的接口,支持连续获取对象产出的每个值。任何实现 Iterable
接口的对象都有一个 Symbol.iterator 属性,这个属性引用默认迭代器。默认迭代器就像一个迭代器
工厂,也就是一个函数,调用以后会产生一个实现 Iterator 接口的对象。
迭代器必须经过连续调用 next()方法才能连续取得值,这个方法返回一个 IteratorObject。这
个对象包含一个 done 属性和一个 value 属性。前者是一个布尔值,表示是否还有更多值能够访问;后
者包含迭代器返回的当前值。这个接口能够经过手动反复调用 next()方法来消费,也能够经过原生消
费者,好比 for-of 循环来自动消费。
生成器是一种特殊的函数,调用以后会返回一个生成器对象。生成器对象实现了 Iterable 接口,
所以可用在任何消费可迭代对象的地方。生成器的独特之处在于支持 yield 关键字,这个关键字可以
暂停执行生成器函数。使用 yield 关键字还能够经过 next()方法接收输入和产生输出。在加上星号之
后, yield 关键字能够将跟在它后面的可迭代对象序列化为一连串值。
image
最新2020整理收集的一些高频面试题(都整理成文档),有不少干货,包含mysql,netty,spring,线程,spring cloud、jvm、源码、算法等详细讲解,也有详细的学习规划图,面试题整理等,须要获取这些内容的朋友请加Q君样:909038429
/./*欢迎加入java交流Q君样:909038429一块儿吹水聊天算法

相关文章
相关标签/搜索