本文主要是介绍ES6 Generator生成器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Generator 函数是一个普通函数,但是有两个特征。一是,function关键字与函数名之间有一个星号;二是,函数体内部使用yield表达式,定义不同的内部状态(yield在英语里的意思就是“产出”):
function * myFun() {console.log(1);yield 1;console.log(2);yield 2;console.log(3);yield 3;
}
const result = myFun();
console.log(result.next());
console.log(result.next());
console.log(result.next());
console.log(result.next());
输出:
Generator 函数是分段执行的,yield表达式是暂停执行的标记,而next方法可以恢复执行。
---------------------------------------------------------------------------------------------------------------------------------
Generator 函数实现ID生成器:
function* crateIdMaker() {let id = 1;while (true) {yield id++;}
}
const idMaker = crateIdMaker();
console.log(idMaker.next().value);
console.log(idMaker.next().value);
console.log(idMaker.next().value);
console.log(idMaker.next().value);
console.log(idMaker.next().value);
console.log(idMaker.next().value);
// 1
// 2
// 3
// 4
// 5
// 6
---------------------------------------------------------------------------------------------------------------------------------
Generator 函数实现可迭代接口:
const lists = {names: ['zs', 'ls', 'ww'],hobbies: ['sing', 'reading'],work: ['administration'],[Symbol.iterator]: function * () {const all = [...this.names, ...this.hobbies, ...this.work];for (const item of all) {yield item;}}
}
for (const item of lists) {console.log(item);
}
输出:
这篇关于ES6 Generator生成器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!