/**
* 什么是迭代器?
*
* 迭代器是一种特殊的对象 (迭代器是一个对象)
* 是一些专门为迭代过程设计的的专有接口 所有迭代器都next()方法
* 每一次调用都返回一个结果对象有二个属性值 一般都猜得到有 value 表示返回下一个的对像,另一个是doen 是一个布尔值 当没有数据值返回true
* 迭代器还会返回内部指针,会用来指向集合中的位置,每一次调用next()方法时 都会返回下一个可用的值,如果最后一个值返回在调用next()方法那么返回对象属性done的值为true 属性vauel则包含最终返回的值,
* 这个返回值不是数据集的一部分,他与函数返回值类似,是函数调用过程中最后一次调用者传递信息的方法,如果没有相关数据就返回undefined
*
*
* */
function creatInerator(items) {
var i = 0;
return {
next() {
var done = i >= items.length;
var value = !done ? items[i++] : undefined;
return {
done,
value,
};
},
};
}
let iteror = creatInerator([1, 2, 3, 4]);
console.log(iteror.next()); //{ done: false, value: 1 }
console.log(iteror.next()); //{ done: false, value: 2 }
console.log(iteror.next()); //{ done: false, value: 3 }
console.log(iteror.next()); //{ done: false, value: 4 }
console.log(iteror.next()); //{ done: true, value: undefined }
console.log("=====================");
/**
* 什么是生成器?
*
* 生成器是返回迭代器的函数,通过function 关键字后的(*)来表示 函数中会用到的关键字 yield
* 星号可以紧挨着 function 关键字后面 也可以隔一个空格表示
* 生成器跟普通函数调用一样,只不过返回是一个迭代器
*
*/
function* createIterator() {
yield 1;
yield 2;
yield 3;
}
let Iterator = createIterator();
console.log(Iterator.next()); //{ value: 1, done: false }
console.log(Iterator.next()); //{ value: 2, done: false }
console.log(Iterator.next()); //{ value: 3, done: false }
console.log(Iterator.next()); //{ value: undefined, done: true }
/**
* createIterator 前面是的星号声明的是一个生成器 yield 是关键字 可以通过它来指定next()方法返回值 以及返回顺序,生成器后连续调用了3次 返回了 3个不同的值 分别是 1,2,3,生成器的调用过程与其他的函数调用的方式是一样的,最终返回的是创建好的迭代器
*
* 生成器有一个特点是,当执行完一条yield 之后,函数就不会执行任何语句,就终止执行了,在调用一次next方法才会继续执行
*
* yield 关键字后面可以跟任何表达式或者是值,这里也可以结合ajax 来使用,可以把ajax 返回值放在 yield 后面
*
**/
console.log("**************");
function* createIterators(items) {
for (let i = 0; i < items.length; i++) {
yield items[i];
}
}
let Iterators = createIterators([1, 2, { name: "自夏" }]);
console.log(Iterators.next()); //{ value: 1, done: false }
console.log(Iterators.next()); //{ value: 2, done: false }
console.log(Iterators.next()); //{ value: { name: '自夏' }, done: false }
console.log(Iterators.next()); //{ value: undefined, done: true }
/**
* yidld 只能在生成器内部使用,在其他地方使用会抛出异常
*
*/
function* createIteratorss(items) {
items.forEach(item => {
yield items; //SyntaxError: Unexpected identifier
});
}
createIteratorss()
什么是迭代器(Iterator)和生成器(generator)
最新推荐文章于 2024-09-06 09:38:52 发布
本文深入探讨了迭代器的概念,它是一个具有next()方法的对象,每次调用返回结果包括value和done属性。生成器是返回迭代器的函数,利用yield关键字暂停和恢复执行。示例展示了如何创建和使用迭代器及生成器,强调了它们在处理序列和异步操作中的应用。
摘要由CSDN通过智能技术生成