概念
- ES6提供的解决异步编程的方案之一
- Generator函数是一个状态机,内部封装了不同状态的数据
- 用来生成遍历器对象
- 惰性求值。可以暂停函数,yield可以暂停函数,而next方法可以启动函数,返回值为yield之后的返回结果
特点
- function与函数名之间有一个符号*
- 内部使用yield来定义不同的状态
- generator函数返回的是指针对象,而不会执行函数内部逻辑
- 调用next方法会从函数内部逻辑开始执行,遇到yield就停止,返回{value:yield之后的表达式结果/undefined, done:false/true}
- 再次调用next方法,会从上一次停止的yield之后开始执行
- yield语句返回结果大多数为undefined,当调用next方法时,传参内容会作为启动时yield的返回值
function* myGenerator() {
console.log("开始执行函数");
yield "yield -- 第一次暂停";
console.log("开始启动");
yield "yield -- 第二次暂停";
console.log("开始第二次启动");
}
let my = myGenerator();
console.log(my.next());
console.log(my.next());
console.log(my.next());
let obj = {username: "admin", password: "12345"}
obj[Symbol.iterator] = function* test() {
yield obj.username
yield obj.password
}
for (item of obj) {
console.log(item);
}