function* Gen() {
yield "first"; // 暫停標(biāo)志
yield "second";
return "third"; // 不參與循環(huán)輸出 但參與 g.next()
}
let g = Gen(); // 返回的是 iterator 迭代器
for(let v of g){
console.log(v);
}
// first
// second
給對(duì)象 加 iterator 接口
let obj = {
name:"yin",
age:18,
};
// for(let v of obj){
// console.log(v); // 報(bào)錯(cuò):obj is not iterable
// }
// 給obj 添加 Symbol.iterator 屬性 值為迭代器(可用 Generator迭代器生成函數(shù) 來創(chuàng)造迭代器)
obj[Symbol.iterator]=function*(){
for(let key in obj){
yield key;
}
};
for(let k of obj){
console.log(k);
}
// 此時(shí) 循環(huán)輸出 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