JavaScript -- ES6 迭代器和生成器

使用迭代器的目的:更高效的操作数据。使用迭代器可以使访问数据和操作数据的过程中,不需要追踪索引

传统的for循环:

for (let I=0; I<10; I++){
    ...
    // 访问数据的过程中,需要追踪索引 i 的值。并不方便且容易出错。
}

学习了迭代器后,就会发现数据访问会变的简洁很多。

什么是迭代器

迭代器是一种特殊的对象,所有的迭代器对象都有一个 next 方法,调用 next 方法会返回一个对象——该对象有两个属性:一个是 value,表示下一个要返回的值;一个是 done,表示是否有更多数据可以返回:当数据访问结束,done 就会置为 true。并且,当 done = true 的时候,value = undefined。

const iterator = createIterator([1, 2, 3])

iterator.next(); // {value: 1, done: false}
iterator.next(); // {value: 2, done: false}
iterator.next(); // {value: 3, done: false}
iterator.next(); // {value: undefined, done: true}

如何生成一个迭代器?试试生成器咯

在 ES6 中,引入了一个生成器对象,它可以让迭代器对象生成的过程变得简单。

// 生成器语法
function *createIterator() {
    yield 1;
    yield 2;
    yield 3;
}
const iterator = createIterator() // 与普通函数调用方法一致

iterator.next(); // {value: 1, done: false}
iterator.next(); // {value: 2, done: false}
iterator.next(); // {value: 3, done: false}
iterator.next(); // {value: undefined, done: true}

生成器函数有一个有趣的特点,每当执行完一条 yield 语句,函数就会停下来。知道再次调用迭代器的 next 方法,就会继续执行到下一个 yield 语句。这种中止函数执行的特性让生成器有很多有趣的应用,这些应用会在下文中涉及。

注意,yield 的使用限制:yield 关键字只能在生成器内部使用,在其他地方使用则会导致语法错误,即使是在生成器内部的函数使用也会报错

function *createIterator(items) {
    items.forEach((item) => {
        yield item; // Wrong~ 这样会报错的哦!
    })
}

生成器的函数表达式写法

(待续)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值