function* Gen() {
yield "first"; // 暂停标志
yield "second";
return "third"; // 不参与循环输出 但参与 g.next()
}
let g = Gen(); // 返回的是 iterator 迭代器
for(let v of g){
console.log(v);
}
// first
// second
给对象 加 iterator 接口
let obj = {
name:"yin",
age:18,
};
// for(let v of obj){
// console.log(v); // 报错:obj is not iterable
// }
// 给obj 添加 Symbol.iterator 属性 值为迭代器(可用 Generator迭代器生成函数 来创造迭代器)
obj[Symbol.iterator]=function*(){
for(let key in obj){
yield key;
}
};
for(let k of obj){
console.log(k);
}
// 此时 循环输出 name 、 age
yield 传参
function* Gen() {
console.log("第一次next");
let a = yield; // yield 还可以传参
console.log("第二次next a=>",a);
let b = yield;
console.log("第三次next b=>",b);
}
let g = Gen();
g.next(); // 第一次next
g.next("a"); // 第二次next a=> a
g.next("b"); // 第三次next b=> b